6

何度も聞かれたはずのこの質問で申し訳ありませんが、問題を解決できません。私は多くのブログ、サイト、フォーラムなどを読んできましたが、私の場合は解決策が見つかりませんでした。

ケース : パフォーマンス/スレッド/メモリ監視のために、ボックスの VisualVM を離れたサーバー (Tomcat、WebLogic) に接続する必要があります。これらのサーバーは、ファイアウォールで保護された (物理または仮想) マシンにインストールされます。ファイアウォールでは大きな間隔でポートが開いており、使用できますが、すべてのポートではありません。

テスト

  • サーバーの起動時にサーバー側で次のJVMオプションを使用して、VisualVMでJMXを介した直接接続を試みました。
    -Djava.rmi.server.hostname=[hostname]
    -Dcom.sun.management.jmxremote
    -Dcom.sun.management.jmxremote.port=[port]
    -Dcom.sun.management.jmxremote.ssl=false
    -Dcom.sun.management.jmxremote.authenticate=false
    

私のネットワークからのサーバーのホスト名とIPアドレスは、リモートサーバーのネットワークからのものと同じではないため、ホスト名を正確に指定しました。

成功しません。VisualVM は常に不明なサーバーを検索しているようです。

  • 私のボックスからアクセス可能なポート(-pオプション)でサーバー側でjstatdを開始しようとしました(このポートでtelnetが機能します)が、jstatdポートを使用してこのホストでvisualVMを起動すると、まだ到達できない何かを待っているようです... . このリモート ホストに接続する jps と同じ動作。

  • ネットワーク保護の少ないサーバーで同じツールを使用してみましたが、うまくいきました。そのため、ボックスとサーバー間の接続を確認しましたが、jstatd に指定したポートとは異なるポートで接続されています。このポートは最初の通信 (一種のハンドシェイク) に必要であり、実際の通信は他のポートで行われますが、予測できません (例: 60305、55197、...)。RMI がどのように機能するのかよくわかりません。

助けてください、気が狂いそうです!

4

3 に答える 3

7

残念ながら、JMX は設定したポート以外のポートを開こうとします。ちょうど昨日、JMX 経由でファイアウォールの背後にある tomcat に接続することに成功しました。2 つのトリッキーな部分は次のとおりです。

  • 次の行を含むjmxremote.accessinというファイルを配置します。CATALINA_HOME/conf

    monitorRole readonly
    controlRole readwrite
    
  • server.xml特別な tomcat リスナー (/lib で必要な catalina-jmx-remote.jar) を介して、jmx によって使用されるポートを設定します。

    <Listener className="org.apache.catalina.mbeans.JmxRemoteLifecycleListener" 
        rmiRegistryPortPlatform="9009" rmiServerPortPlatform="9010" />
    

次に、ファイアウォールでこれら 2 つのポートを開きます。できます。しかし、それはTomcatのためだけです。

もう 1 つのオプションは、ssh トンネリングを使用することです。つまり、SSH 経由で接続し、ローカル ポート (jmx クライアントが実行されているポート) をトンネルの反対側のポートに転送するように構成します。

参考文献:

于 2011-02-18T19:55:27.823 に答える
0

[ホスト名]で、[ポート]とtcpポート範囲40000〜60000をIP専用に開きます。これは私にとってかなりうまくいった。

于 2011-11-16T13:32:29.257 に答える