8

我目前正在编写一个应用程序来监视另一个 Java 进程并在达到某些目标时采取特定的行动。例如,如果某个线程死锁一段时间,则终止该线程,如果内存使用量超过特定数量,则发送电子邮件警报并终止该进程等。

我的应用程序将作为独立应用程序运行,监控特定的其他应用程序(在本地,尽管从我可以看到远程或本地在这里没有区别)。

我正在通过 MXBeans 监视外部 JVM,但是除了像“kill -9”这样的系统调用(顺便说一下,我在 UNIX 中工作)之外,还看不到杀死外部进程的干净方法。

有没有办法通过 MXBean 接口杀死 JVM?

格雷厄姆

4

2 回答 2

8

当然。在调用 的目标服务器上实现一个 MBean System.exit(),并将其作为 JMX 操作从客户端调用。

于 2009-10-28T10:48:41.020 回答
2

如果您使用的是 Spring,您可以简单地对您的 bean 进行注释,使其其中一个操作公开为MBean 操作。所以它会是这样的:

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

...或者也许自己停止应用程序上下文。

于 2009-10-28T11:43:21.457 回答