我想编写一个非特权(非root用户访问)的JMX客户端程序,该程序监视启用了JMX本地访问的特权(作为root用户运行)应用程序-Dcom.sun.management.jmxremote。
至少在MacOSX上,当我自己运行时,jconsole(和jps)看不到根进程。
这仅仅是生活中的事实,还是有某种方法可以配置它?
最佳答案
如果不允许您的客户端查看根进程,则无法通过PID进行附加。您需要让根应用程序加载一个JMXServer,该JMXServer会在[> 1024]端口上进行侦听,然后您可以通过该端口而不是通过PID进行连接。最简单的方法是指定几个其他的系统属性,这些属性将触发JVM自动加载JMX服务器。例如(这些都是最不安全的):
-Dcom.sun.management.jmxremote.authenticate = false
-Dcom.sun.management.jmxremote.ssl = false
-Dcom.sun.management.jmxremote.port = 7777
请参见JMX Management and Monitoring Properties。
要以编程方式创建JMXServer,请参见JavaDoc for javax.management.remote。关于此主题here的确有很好的指南/教程。
关于java - JMX本地监视的访问控制,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/4462236/