2009-10-28 19 views
7

Obecnie piszę aplikację, aby monitorować inny proces Java i podjąć konkretne działania, gdy niektóre cele są trafione. Na przykład, jeśli zakleszczenia wątku przez pewien czas, zabij wątek, jeśli zużycie pamięci przekroczy określoną kwotę, wyślij powiadomienia e-mail i zabij proces, itp.Czy można programowo zamknąć proces Java przez JMX

Moja aplikacja będzie działać jako samodzielna aplikacja , monitorowanie konkretnych innych aplikacji (lokalnie, choć z tego, co widzę, zdalne lub lokalne, nie ma tu znaczenia).

Monitoruję zewnętrzne maszyny JVM za pośrednictwem MXBeans, ale nie widzę sposobu, aby zabić proces zewnętrzny krótszy od wywołania systemowego, jak "kill -9" (pracuję w systemie UNIX).

Czy istnieje sposób na zabicie JVM za pomocą interfejsów MXBean?

Graham

+0

Nie jestem świadomy gotowości do wykonania tej czynności, ale mam tendencję do wdrażania komponentu MBean "awaryjnego wyłączenia", który po wywołaniu wywołuje funkcję System.exit (ja również pozwalam ci przejść w kodzie powrotu wyjścia). – Adamski

Odpowiedz

7

Pewnie. Wdróż komponent MBean na serwerze docelowym, który wywołuje System.exit() i wywołaj go jako operację JMX od klienta.

2

Jeśli używasz Spring, możesz po prostu opisać swój komponent bean, aby jedna z jego operacji była wyświetlana jako MBean operation. Tak więc byłoby coś takiego:

@MBeanOperation(description="Kill the service") 
public void die() { 
    System.exit(); 
} 

... lub może sam przerwać kontekst aplikacji.

+0

masz na myśli '@ ManagedOperation' – skaffman

Powiązane problemy