AmazonのEC2クラスターで実行されているJavaアプリケーションへの接続に問題があります。問題のインスタンスのセキュリティグループには、「JMXポート」(通常はRMIレジストリポート)とサーバーポート(ほとんどの作業を行う)の両方を確実に許可しています。Jconsoleは接続しますが、ハングしているようで、情報が表示されません。
次のようなJavaを実行しています。
java -server -jar foo.jar other parameters here > java.log 2>&1
私たちは試しました:
- ポートへのTelnetは接続されますが、情報は表示されません。
jconsole
ssh経由でremote-X11を使用してインスタンス自体で実行でき、接続して情報を表示します。したがって、JREはそれをローカルにエクスポートしています。- セキュリティグループ内のすべてのポートを開きます。うわぁ。
tcpdump
トラフィックが他のポートに送信されないようにするために使用します。- ローカルでシミュレートします。同じアプリケーションパラメータを使用して、ローカルJREまたはネットワーク上の他の場所で実行されているJREにいつでも接続できます。
java -version
出力:
OpenJDK Runtime Environment (IcedTea6 1.11.5) (amazon-53.1.11.5.47.amzn1-x86_64)
OpenJDK 64-Bit Server VM (build 20.0-b12, mixed mode)
余談ですが、Simple JMXパッケージを使用しています。これにより、RMIレジストリと、通常はRMIレジストリによって半ランダムに選択されるサーバーポートの両方を設定できます。次のJMXURIのようなものでこれを強制することもできます。
service:jmx:rmi://localhost:" + serverPort + "/jndi/rmi://:" + registryPort + "/jmxrmi"
最近では、サーバーとレジストリの両方に同じポートを使用しています。これまで、セキュリティグループのルールを簡単にするためにX
、レジストリポートおよびサーバーポートとして使用していました。X+1
レジストリポートjconsole
または使用しているJMXクライアントに接続します。