2009-10-28 22 views
7

Actualmente estoy escribiendo una aplicación para supervisar otro proceso de Java y realizar acciones específicas cuando se golpean ciertos objetivos. Por ejemplo, si un hilo interbloquea durante un tiempo determinado, elimine el hilo, si el uso de la memoria excede una cantidad específica, envíe alertas por correo electrónico y mate el proceso, etc.¿Es posible cerrar programáticamente un proceso de Java a través de JMX

Mi aplicación se ejecutará como una aplicación independiente , monitoreando otras aplicaciones específicas (localmente, aunque desde lo que puedo ver a distancia o local no hace diferencia aquí).

Estoy monitoreando las JVM externas a través de MXBeans, pero no veo una manera limpia de matar el proceso externo excepto una llamada al sistema como 'kill -9' (estoy trabajando en UNIX por cierto).

¿Hay alguna manera de matar una JVM a través de las interfaces MXBean?

Graham

+0

No conozco una forma inmediata de hacer esto, pero tiendo a implementar un MBean de "parada de emergencia" que simplemente llama a System.exit cuando se llama (también le permito pasar en el código de retorno de salida). – Adamski

Respuesta

7

Sure. Implemente un MBean en el servidor de destino que llama al System.exit(), e invoque eso como una operación JMX del cliente.

2

Si está utilizando Spring, simplemente puede anotar su bean para que una de sus operaciones quede expuesta como MBean operation. Por lo que sería algo como esto:

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

... o tal vez detener el contexto de aplicación a sí mismo.

+0

te refieres a '@ ManagedOperation' – skaffman

Cuestiones relacionadas