ローカルコンピュータからそのアプリケーションを接続する必要がありますが、リモートコンピュータの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サーバーが実行されているポートをクライアントに通知します。