是否可以通过编程方式启用远程jmx监控?

我需要以编程方式启动一个新的java进程并动态设置JMX端口。 所以不要这样做

-Djava.rmi.server.hostname=127.0.0.1 -Dcom.sun.management.jmxremote.port=9995 -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=false 

我想做以下几点

 System.setProperty("java.rmi.server.hostname", "127.0.0.1" ); System.setProperty("com.sun.management.jmxremote", "true" ); System.setProperty("com.sun.management.jmxremote.authenticate", "false" ); System.setProperty("com.sun.management.jmxremote.ssl", "false" ); System.setProperty("com.sun.management.jmxremote.port", "9995" ); 

但它不起作用。 知道为什么吗?

当您的代码被调用时,您错过了配置jmxremote连接器的机会。

您需要做的是创建自己的rmi注册表和JMXConnectorServer来侦听rmi调用并将它们传递给MBeanServer。

 private void createJmxConnectorServer() throws IOException { LocateRegistry.createRegistry(1234); MBeanServer mbs = ManagementFactory.getPlatformMBeanServer(); JMXServiceURL url = new JMXServiceURL("service:jmx:rmi://localhost/jndi/rmi://localhost:1234/jmxrmi"); JMXConnectorServer svr = JMXConnectorServerFactory.newJMXConnectorServer(url, null, mbs); svr.start(); }