質問を書いたとき、私は少し迷って混乱しました。その間に私が学んだことは次のとおりです。通常、Tomcat Windows サービスはローカル システム アカウントで実行されます。それがすべての大騒ぎの主な理由です。
サービス構成の JVM 設定を単純に設定-Dcom.sun.management.jmxremote
すると、JMXが実際に有効になります。同じ JVM インスタンスで実行される JMX クライアントがある場合 (たとえば、アプリケーション自体に焼き付けられているため)、次のMBeanServer
ようなものを取得できますMBeanServerFactory.findMBeanServer(<specific-agent-ID-or-null>)
。ただし、JConsole はこの Tomcat プロセスをリストしません。ここですべて説明されています: https://blogs.oracle.com/nbprofiler/entry/monitoring_java_processes_running_as。
他の場所で説明したように、これで十分でない場合は、 も設定する必要があります-Dcom.sun.management.jmxremote.port=<port>
。その後、 を使用して JConsole で JMX に接続できますlocalhost:<port>
。Java コードから、これは以下を使用して実現できます。
JMXServiceURL target = new JMXServiceURL("service:jmx:rmi:///jndi/rmi://localhost:<port>/jmxrmi");
JMXConnector connector = JMXConnectorFactory.connect(target);
connector.getMBeanServerConnection();