Reputation: 3919
I'm currently writing an app to monitor another Java process and take specific actions when certain targets are hit. For example, if a thread deadlocks for a certain time, kill the thread, if the memory usage goes over a specific amount, send email alerts and kill the process, etc.
My app will run as a stand-alone app, monitoring specific other apps (locally, though from what I can see remote or local makes no difference here).
I'm monitoring the external JVMs via MXBeans, but cannot see a clean way to kill the external process short of a system call like 'kill -9 ' (I'm working in UNIX by the way).
Is there any way to kill a JVM through the MXBean interfaces?
Graham
Upvotes: 8
Views: 3761
Reputation: 10927
If you're using Spring, you can simply annotate your bean to have one of its operations being exposed as an MBean operation. So it would be something like this:
@MBeanOperation(description="Kill the service")
public void die() {
System.exit();
}
... or perhaps stop the application context yourself.
Upvotes: 2
Reputation: 403441
Sure. Implement an MBean on the target server that calls System.exit()
, and invoke that as a JMX operation from the client.
Upvotes: 8