写了一个 jmx 监控的小 demo ,代码如下
MBeanServer mbs = ManagementFactory.getPlatformMBeanServer(); ObjectName hellOname= new ObjectName("jmxBean:name=hello"); mbs.registerMBean(new Hello(), helloName); try { LocateRegistry.createRegistry(9999); JMXServiceURL url = new JMXServiceURL ("service:jmx:rmi://localhost:9999/jndi/rmi://localhost:9999/jmxrmi"); System.out.println(url.getURLPath()); System.out.println(url.getHost() + " " + url.getPort()); JMXConnectorServer jcs = JMXConnectorServerFactory.newJMXConnectorServer(url, null, mbs); System.out.println("begin rmi start"); jcs.start(); System.out.println("rmi start"); } catch (MalformedURLException e) { e.printStackTrace(); } catch (RemoteException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } Dockerfile:
FROM java:8 copy jmx.jar /home EXPOSE 9999 在测试机上执行:sudo docker run -p 9999:9999 --name jmxtest -it jmxtest java -jar home/jmx.jar
发现使用 JConsole 连接不上目标机器的 9999 端口,telnet 是通的;上网看了很多资料说是 rmi 和 jmx 的端口写成一样的就可以,请教大佬,我这个应该怎么修改?感谢
