jconsoleを9999経由でのみ接続するか、プロキシを使用する方法はありますか?この記事はまだ最良の解決策ですか?または、私は何かが欠けていますか?
はい、その記事はほぼ正しいです。
サーバーでJMXポートを指定する場合(-Dcom.sun.management.jmxremote.port=####
)は、実際にはアプリケーションのレジストリポートのみを指定していることになります。接続すると、jconsoleが実際にすべての作業を行う追加のサーバーポートが提供されます。作業に転送するには、レジストリポートとサーバーポートの両方を知っている必要があります。
レジストリポートとサーバーポートの両方を8000に設定してアプリケーションを実行するには、次のようなものが機能するはずです。詳細については、ここを参照してください。
-Dcom.sun.management.jmxremote.port=8000
-Dcom.sun.management.jmxremote.rmi.port=8000
-Djava.rmi.server.hostname=127.0.0.1
余談ですが、私のSimpleJMXライブラリでは、両方のポートを簡単に設定でき、両方を同じポートに設定できます。
したがって、転送する必要のある両方のポートがわかったら、ssh
コマンドを設定できます。たとえば、レジストリとサーバーのポートを8000として構成する場合は、次のようにします。
ssh -L 8000:localhost:8000 remote-host
これにより、リモートホスト上のlocalhost:8000に転送するローカルポート8000が作成されます。-L
複数のポートを転送する必要がある場合は、複数の引数を指定できます。次に、jconsoleをlocalhost:8000に接続すると、リモートホストに適切に接続されます。
また、サーバーに複数のインターフェイスがある場合はjava.rmi.server.hostname
、適切なインターフェイスにバインドするように変数を設定する必要があります。
-Djava.rmi.server.hostname=10.1.2.3