4

Spring3.1スタンドアロン環境で開発しています。

jconsole を介してアプリケーションをリモート接続しようとしています。ローカルで動作していますが、アプリケーションを Linux マシンにデプロイするとタイムアウトになります。

環境を実行するためにデーモンを使用しています。

これは、run.sh スクリプトに追加するものです。

-Dcom.sun.management.jmxremote \
-Dcom.sun.management.jmxremote.port=6969 \
-Dcom.sun.management.jmxremote.ssl=false \
-Dcom.sun.management.jmxremote.authenticate=false \
com.mypackage.daemon.FixDaemon

および applicationContext.xml 内:

<context:mbean-server />
<context:mbean-export />

netstat を実行した後、Linux マシンで次のように表示されます。

[root@ logs]# netstat -an | grep 6969
tcp        0      0 :::6969                     :::*                        LISTEN

聞いているようです。

しかし、jconsole インターフェイス内に ip:6969 を追加すると、接続に失敗したポップアップが表示されます。

私は何が間違っているのですか?

ありがとう、レイ。

4

2 に答える 2

6

最初に、このオプションもアプリケーションに追加してみてください:

-Djava.rmi.server.hostname=<ip>

また、jconsole は通信に RMI を使用していることにも注意してください。これは、jconsole が最初に ip:6969 に接続することを意味します。次に、サーバーは、jconsole に戻されるランダムなポート X を生成します。次に、Jconsole は ip:X への別の接続を開きます。X はランダムであるため、ファイアウォールでこの特定のポートを開くことはできません。すべてのポートを開くか、別の主題であるソックス プロキシを使用する必要があります。

于 2012-08-27T13:19:19.917 に答える
2
  1. マシンから telnet を使用してそのポートに接続してみてください。これが成功しない場合、通常はファイアウォールがパケットをドロップしていることが原因です。そのポートを開くには、ネットワーク管理者に相談する必要があります。

    : 2 つのポートを開く必要があります。1 つは RMIRegistry をバインドするためのもので、もう 1 つは RMI オブジェクトをエクスポートするためのものです。RMI は通常、オブジェクトをランダムな上位ポートにエクスポートします。ただし、これはファイアウォールで保護された環境では機能しないため、エクスポートするポートを構成する必要があります。これは、RMI URL を使用して行われます。

  2. これを Linux で実行している場合は を実行し、hostname -i127.0.0.1 が返された場合は修正します/etc/hostsJConsole の FAQ エントリには、これに関する詳細情報があります。

  3. 私が強くお勧めするもう 1 つのオプションは、Jolokiaを検討することです。これは、ファイアウォールの構成を変更する必要はありませんが、HTTP 経由で JMX 機能を提供します。

于 2012-08-27T16:09:09.213 に答える