我想编写一个非特权(非root访问)JMX客户端程序,该程序监视启用了JMX本地访问权限的特权(以root身份运行)-Dcom.sun.management.jmxremote。
至少在MacOSX上,jconsole(和jps)在我自己运行时看不到根进程。
这只是生活中的事实,还是有某种方法可以配置它?
答案 0 :(得分:1)
JMX使用一个简单的TCP端口,您可以使用某些命令行选项定义该端口。如果端口是打开的,任何人(包括非特权用户)都应该能够看到它。
至于进程本身,jps无法看到其他用户的进程,但你可以看到“ps aux”。
答案 1 :(得分:1)
如果您的客户端不允许查看根进程,则无法通过PID附加。您需要的是让根应用程序加载一个将在[> 1024]端口上侦听的JMXServer,然后您可以通过端口而不是PID连接。最简单的方法是指定几个系统属性,这些属性将触发JVM自动加载JMX服务器。例如(这些都是最不安全的):
请参阅JMX Management and Monitoring Properties。
要以编程方式创建JMXServer,请参阅javax.management.remote的JavaDoc。关于这个主题有一个非常好的指南/教程here。