如果Tomcat作为Windows服务运行,为什么没有本地MBeanServer?

时间:2012-05-03 12:05:16

标签: java tomcat jmx

如果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

但是,我没有在任何地方找到解释为什么会这样。

1 个答案:

答案 0 :(得分:1)

当我写这个问题时,我有点迷茫和迷茫。这是我在此期间学到的东西。通常,Tomcat Windows服务在本地系统帐户下运行。这是所有大惊小怪的主要原因。

如果您只是在服务配置的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}}