56

リモートのWindowsXP上のJava6VMでJavaアプリケーションを実行しています。このアプリケーションで、jvisualvm.exeを実行して、実行中のアプリケーションに自動的に接続できます。

ローカルコンピュータからそのアプリケーションを接続する必要がありますが、リモートコンピュータのJMXポート番号がわかりません。どこで見つけることができますか?または、ポート番号を指定するために、いくつかのVMパラメーターを使用してそのアプリケーションを再起動する必要がありますか?

サーバーでJMXポートを見つける方法の質問を読んだ後、リモートコンピューターでコマンドを実行しました

netstat -apn

しかし、何も得られませんでした。

4

1 に答える 1

77

ローカルコンピュータからそのアプリケーションを接続する必要がありますが、リモートコンピュータのJMXポート番号がわかりません。どこで見つけることができますか?または、ポート番号を指定するために、いくつかのVMパラメーターを使用してそのアプリケーションを再起動する必要がありますか?

デフォルトでは、このページから引数を指定しない限り、JMXはポートで公開しません:JMXをアクティブ化する方法...

-Dcom.sun.management.jmxremote
-Dcom.sun.management.jmxremote.port=9010
-Dcom.sun.management.jmxremote.local.only=false
-Dcom.sun.management.jmxremote.authenticate=false
-Dcom.sun.management.jmxremote.ssl=false
-Djava.rmi.server.hostname=localhost

注:上記の設定の一部のセキュリティへの影響に注意する必要があります。

また、実行している場合は、これらのシステムプロパティのいずれかにアクセスして、それらが設定されているかどうかを確認できるはずです。

if (System.getProperty("com.sun.management.jmxremote") == null) {
    System.out.println("JMX remote is disabled");
} else [
    String portString = System.getProperty("com.sun.management.jmxremote.port");
    if (portString != null) {
        System.out.println("JMX running on port "
            + Integer.parseInt(portString));
    }
}

サーバーの接続方法によっては、次のパラメーターも指定する必要がある場合があります。最初のJMX接続の一部として、jconsoleはRMIポートに接続して、JMXサーバーが実行されているポートを判別します。JMX対応アプリケーションを最初に起動すると、独自のホスト名を調べて、その最初のRMIトランザクションで返すアドレスを決定します。ホスト名が含まれていない場合、/etc/hostsまたはホスト名が正しくないインターフェイスアドレスに設定されている場合は、次のように上書きできます。

-Djava.rmi.server.hostname=<IP address>

余談ですが、私のSimpleJMXパッケージでは、 JMXサーバーRMIポートの両方を定義したり、両方を同じポートに設定したりできます。で定義された上記のポートcom.sun.management.jmxremote.portは、実際にはRMIポートです。これは、JMXサーバーが実行されているポートをクライアントに通知します。

于 2012-04-28T22:53:15.880 に答える