代码之家  ›  专栏  ›  技术社区  ›  GKelly

是否可以通过JMX编程关闭Java进程

  •  7
  • GKelly  · 技术社区  · 15 年前

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

    我的应用程序将作为一个独立的应用程序运行,监视特定的其他应用程序(在本地,尽管从远程或本地看到的内容在这里没有任何区别)。

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

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

    格雷厄姆

    2 回复  |  直到 11 年前
        1
  •  7
  •   skaffman    15 年前

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

        2
  •  2
  •   Wilfred Springer    15 年前

    如果您使用的是Spring,那么您可以简单地对bean进行注释,使其操作之一暴露为 MBean operation . 所以应该是这样的:

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

    …或者自己停止应用程序上下文。