2010-12-16 64 views
1

我想要写非特权(非根访问)JMX客户端,其监视特权程序(root运行)应用程序,其具有JMX本地访问启用-Dcom.sun.management.jmxremote。访问控制JMX本地监控

至少MacOSX上,JConsole的(和JPS)没有看到根进程时,我为自己运行。

这只是这里的生活的事实,还是有一些方法来配置这个?

回答

1

如果您的客户端不允许看到根过程,那么你就无法通过PID重视。您需要的是让根应用程序加载一个将监听[> 1024]端口的JMXServer,然后您可以通过端口而不是通过PID进行连接。最简单的方法是指定几个系统属性,它们将触发JVM自动加载JMX服务器。例如(这些都是最不安全的):

  • -Dcom.sun.management.jmxremote.authenticate =假
  • -Dcom.sun.management.jmxremote.ssl =假
  • -Dcom。 sun.management.jmxremote.port = 7777

参见JMX Management and Monitoring Properties

以编程方式创建一个JMXServer,查看javadoc了解javax.management.remote。有关这个主题here真的很好的指导/教程。

+0

哦,拜托,请你指点我手动启动JMX服务器而不是-D的东西?这样的服务器会暴露VM bean中的构建吗? – bmargulies 2010-12-16 21:25:17

+0

更新回答。是的,这将允许您访问内置的VM MXBeans。 – Nicholas 2010-12-16 21:58:58

1

JMX使用一个简单的TCP端口,您可以使用一些命令行选项来定义它。如果端口是开放的,任何人(包括非特权用户)都应该能够看到它。

至于这个过程本身,JPS无法看到其他用户的进程,但你可以用“PS AUX”看到那么。