2016-10-27 7 views
0

jstatdをRMIレジストリの特定のポートで開始する場合は、このために-pパラメータを渡すことができます。jstatdの2番目のオープンポートを強制する方法または予測する方法は?

しかし、問題は、ファイアウォールルールの作成やJVisualVMを使用してDockerコンテナ内で実行中のリモートjstatdに接続するための2番目のランダムなポート(Javaでは「anonymous port」と呼ばれます)を開くことです。

jstatd sourceを見ると、UnicastRemoteObject.exportObject(remoteHost, 0)が呼び出され、ランダムなような新しい「匿名ポート」が開かれることがわかります。

この最後のポートを固定ポートにする方法、またはどちらを選択するかを予測する方法はありますか?

+0

[RMIが特定のポートセットのみを使用するようにするにはどうすればいいですか?](http://stackoverflow.com/questions/56687/how-do-i-ensure-that-rmi-uses-only -a-specific-set-of-ports) – jchampemont

+0

実際には、ソケットファクトリの競合がない限り、新しくエクスポートされたオブジェクトは以前に使用されたポート(レジストリポートなど)を再利用します。証拠はありますか?またはこの誤解だけに基づいてこの質問ですか? – EJP

+0

@EJP:私はあなたのコメントを本当に理解していません...私の質問は、 'jstatd'を起動すると別のポート(RMIレジストリポート)が開かれ、 (例えば)JVisualVMはこのリモートサーバにアクセスすることができません... –

答えて

0

匿名ポートを使用してどの具体的なポートを開くかを簡単に予測する方法はありませんでした。

しかし、私は3つのポートを強制的に「jakestatd」と呼ばれるjstatdの書き換え(最後、私はjstatdことを発見したので、実際に3つのポートを開いていない2、私が最初に考えたとして)jstatd使用していることが分かりました。

私はこれらのポートを制御するために必要なので、それは私のために十分ではなかったとして、私はこの正確な問題(他と同様に)答えるejstatdを書いたので、今、私は(ejstatdのフォルダの中)を使用してTHOSポートを制御することができます。

mvn exec:java -Dexec.args="-pr 2222 -ph 2223 -pv 2224" 

ここで開かれる3つのポートは222222232224なり、RMIレジストリがポート2222で利用できるようになります。

関連する問題