web-dev-qa-db-ja.com

デフォルトのJMXポート番号を見つける方法

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

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

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

netstat -apn

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

48
chance

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

デフォルトでは、このページから引数を指定しない限り、JMXはポートで公開しません: How to activate JMX ...

-Dcom.Sun.management.jmxremote
-Dcom.Sun.management.jmxremote.port=9010
-Dcom.Sun.management.jmxremote.local.only=false
-Dcom.Sun.management.jmxremote.authenticate=false

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

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サーバーが実行されているポートをクライアントに伝えます。

59
Gray