Java 对JMX本地监控的访问控制

Java 对JMX本地监控的访问控制,java,macos,jmx,Java,Macos,Jmx,我想编写一个非特权(非根访问)JMX客户端程序,用于监视启用了JMX本地访问的特权(以根用户身份运行)应用程序-Dcom.sun.management.jmxremote 至少在MacOSX上,当我自己运行时,jconsole(和jps)看不到根进程 这就是这里的实际情况,还是有什么方法可以配置它?JMX使用一个简单的TCP端口,您可以使用一些命令行选项来定义它。如果端口打开,任何人(包括非特权用户)都应该能够看到它 至于进程本身,jps无法查看其他用户的进程,但您可以使用“ps aux”查看。

我想编写一个非特权(非根访问)JMX客户端程序,用于监视启用了JMX本地访问的特权(以根用户身份运行)应用程序-Dcom.sun.management.jmxremote

至少在MacOSX上,当我自己运行时,jconsole(和jps)看不到根进程


这就是这里的实际情况,还是有什么方法可以配置它?

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


至于进程本身,jps无法查看其他用户的进程,但您可以使用“ps aux”查看。如果不允许您的客户端查看根进程,则您无法通过PID连接。您需要的是让根应用程序加载一个JMXServer,它将侦听[>1024]端口,然后您可以通过该端口而不是通过PID进行连接。实现这一点最简单的方法是指定两个以上的系统属性,这些属性将触发JVM自动加载JMX服务器。例如(这些都是最不安全的):

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


要以编程方式创建JMXServer,请参阅的JavaDoc。关于这个主题,有一个非常好的指南/教程。

哦,拜托,拜托,你能给我指一下手动启动JMX服务器而不是-D之类的东西的说明吗?这样的服务器会公开内置的VM bean吗?更新答案。是的,这将允许您访问内置的VM MXBeans。