3

jstatd を使用して、サーバー上で実行されているすべての Java プロセスを監視しようとしています。VisualVM に接続して実行中のすべてのプロセスを確認できるように十分にセットアップしました。ほとんどの表示は問題なく動作しますが、特定のもの (特に CPU 使用率と MBean) が表示されません。代わりに、次のように述べています。

MBean ブラウザ

JMX エージェントへの JMX 接続を確立できなかったため、データを利用できません。

問題は、アプリケーションがjstatdローカルのレジストリではなく RMI レジストリを介して「アナウンス」する必要があることだと考えたため、次のことを試しました (これらの提案に従って) が、それでも表示されません。私が試したコードは次のとおりです。

public class JmxRmiConnectorTest {
    public static void main(String[] args) throws Exception {
        Registry rmiRegistry = LocateRegistry.createRegistry(9994);
        String svc =
            "service:jmx:rmi://localhost:9994/jndi/rmi://localhost:1099/connector";

        MBeanServer mbeanServer = ManagementFactory.getPlatformMBeanServer();

        JMXServiceURL url = new JMXServiceURL(svc);
        RMIConnectorServer rmiServer = new RMIConnectorServer(url, null, mbeanServer);
        rmiServer.start();

        Thread.sleep(100000);

        rmiServer.stop();
    }
}

jstatd で見たときに、MBean と CPU 使用率を VisualVM に表示するにはどうすればよいですか?

4

3 に答える 3

9

jstatd は JMX とは関係ありません。Jstatd は Jvmstat のプロキシです。MBean と CPU 使用率を取得するには、JMX も有効にする必要があります。詳細については、JMX リモート モニタリングと管理を参照してください。JMX を有効にすると、VisualVM は JMX も使用できることを (jvmstat 経由で) 自動的に検出し、jvmstat と JMX の両方からのデータを 1 か所に表示します。

于 2012-02-20T13:56:06.917 に答える
0

迅速な作業方法が必要な方に。JMX は動的に開始/停止できます。つまり、JVM を再起動する必要はありません。私の場合、jmx を動的に開始して jvisualvm を再起動すると、JMX と CPU の使用率は正常に機能します。

jcmd PID ManagementAgent.start jmxremote.port=9999 jmxremote.ssl=false jmxremote.authenticate=false

また

jcmd PID ManagementAgent.stop
于 2022-02-08T03:07:16.850 に答える
0

リモートで、このように Java を起動して jmxremote を有効にします。

java -Dcom.sun.management.jmxremote \
     -Dcom.sun.management.jmxremote.port=9191 \
     -Dcom.sun.management.jmxremote.authenticate=false \
     -Dcom.sun.management.jmxremote.ssl=false \
     -Djava.rmi.server.hostname=`hostname` \
     -jar app.jar

ロケールでは、このように jps を使用しますjps YOUHOSTNAME:9191

于 2014-08-03T10:42:32.097 に答える