如果Tomcat作为Windows服务运行(使用Windows Tomcat安装程序创建),则无法使用-Dcom.sun.management.jmxremote
启用JMX。您还需要设置-Dcom.sun.management.jmxremote.port=<port>
。除其他地方外,这里解释了这一点:Unable to use JConsole with Tomcat running as windows service
但是,我没有在任何地方找到解释为什么会这样。
答案 0 :(得分:1)
如果您只是在服务配置的JVM设置中设置-Dcom.sun.management.jmxremote
,则确实会启用JMX 。如果您有一个在同一个JVM实例中运行的JMX客户端(例如,因为它已经融入了应用程序本身),您可以像MBeanServer
一样保持MBeanServerFactory.findMBeanServer(<specific-agent-ID-or-null>)
。-Dcom.sun.management.jmxremote.port=<port>
。但是,JConsole不会列出此Tomcat进程。这一切都在这里解释:https://blogs.oracle.com/nbprofiler/entry/monitoring_java_processes_running_as。
如其他地方所述,如果这还不够好,您还需要设置localhost:<port>
。然后,您可以使用JMXServiceURL target = new JMXServiceURL("service:jmx:rmi:///jndi/rmi://localhost:<port>/jmxrmi");
JMXConnector connector = JMXConnectorFactory.connect(target);
connector.getMBeanServerConnection();
通过JConsole连接到JMX。从Java代码可以使用以下方法实现:
{{1}}