2009-10-28 3 views
7

Ich schreibe gerade eine App, um einen anderen Java-Prozess zu überwachen und bestimmte Aktionen auszuführen, wenn bestimmte Ziele getroffen werden. Wenn ein Thread beispielsweise für eine bestimmte Zeit blockiert, wird der Thread beendet, wenn die Speicherbelegung einen bestimmten Wert überschreitet, E-Mail-Benachrichtigungen senden und den Prozess beenden.Ist es möglich, einen Java-Prozess über JMX programmatisch zu schließen?

Meine App wird als eigenständige App ausgeführt Überwachung bestimmter anderer Apps (lokal, obwohl das, was ich remote oder lokal sehen kann, hier keinen Unterschied macht).

Ich überwache die externen JVMs über MXBeans, sehe aber keinen sauberen Weg, um den externen Prozess kurz nach einem Systemaufruf wie 'kill -9' zu beenden (ich arbeite übrigens in UNIX).

Gibt es eine Möglichkeit, eine JVM über die MXBean-Schnittstellen zu töten?

Graham

+0

Ich bin mir nicht bewusst, eine Out-of-the-Box-Art, dies zu tun, aber ich neige dazu, eine "Notabschaltung" MBean implementieren, die System.exit aufgerufen, wenn sie aufgerufen werden (ich erlaube Ihnen auch zu übergeben im Exit-Return-Code). – Adamski

Antwort

7

Sicher. Implementieren Sie eine MBean auf dem Zielserver, der System.exit() aufruft, und rufen Sie diese als eine JMX-Operation vom Client auf.

2

Wenn Sie Spring verwenden, können Sie Ihre Bean einfach mit Anmerkungen versehen, damit einer ihrer Operationen als MBean operation angezeigt wird. So würde es so etwas sein:

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

... oder vielleicht den Anwendungskontext selbst stoppen.

+0

Sie meinen '@ ManagedOperation' – skaffman

Verwandte Themen