14

jmxまたはjstatdを使用して(EC2マシンへの)sshトンネルを介してvisualvmアプリを使用したいと思います。どうすればよいですか?試行された(そして失敗した)もののリストは次のとおりです:(ところで:ビジュアルvmが適切でない場合、リモートマシンでメモリリークを見つけるにはどうすればよいですか?)

jstatd:試行:

EC2マシンにjstatdサーバーをセットアップしました(アプリはすでに実行されていました)次に、ローカルポート3333をリモートポート1099にマッピングするトンネルをセットアップしましたVisualVMで、ポート3333でjstatdを使用して接続しようとしました...どのプロセスもありませんEC2に表示されました

このリンクは、jstatdが別のポートを開くことを示しています:http: //rukuro-blog.heroku.com/2011/06/30/monitoring-remote-java-applications-with-visualvm ...ローカルホストからそのポートをトンネリングしましたリモートに。visualvmを再起動しました...まだ何もありません

次のコマンドを使用してEC2から実行されているプロセスを一覧表示しようとすると、次のようになります。

jps -l -m -v rmi://localhost

...プロセスのリストを取得しました

を使用して自宅のマシンにリストしたとき

jps -l -m -v rmi://localhost:3333

....私は何も得られませんでした!したがって、rmiポートはjstatdポート(3333)でトンネリングされていません...?

jmxの試み:

次のコマンドを使用して、リモートマシンでアプリケーションを起動しました。

java -Dcom.sun.management.jmxremote.port=3333 \
     -Dcom.sun.management.jmxremote.ssl=false \
     -Dcom.sun.management.jmxremote.authenticate=false\
        -cp :post/* <appName>

...アプリが動作するので、ローカルポート3333をリモート3333にトンネリングしました

次に、ビジュアルvmインターフェイスからlocalhost:3333へのjmxリンクを設定しようとしました:...次のようなエラーが表示されます:

cannot connect to localhost:3333 using service:jmx:rmi:///jndi/rmi://localhost:3333/jmxrmi

RMI削除サーバーへのリンクを設定する必要がある場合、その方法がわかりません。

JMXMPの試み:

これは有望ですが、何かが正しくありません。

まず、jmx_remote jarをクラスパスに追加し、上記のJMXの場合と同じコマンドを使用して、リモートマシンでアプリケーションを起動しました。オラクルのダウンロードリンクでjarファイルを見つけました

ローカルポート3333からリモートポート3333へのsshトンネルを設定しました。次に、calsspath内の同じjmx_remoteファイルを使用してvisualvmを起動しました。

visualvm -cp:a ~/jmx/jmxremote_optional.jar

次に、visualvmをリモートサーバーに接続しようとしました。

service:jmx:jmxmp://localhost:3333

これで、visualvmは無期限に接続しようとしているようです。ステータスバーに「Addingservice:jmx:jmxp:// localhost:3333」と表示され、リモートエンドでアプリケーションをシャットダウンするまで続行します。シャットダウンすると、接続できなかったことを示すポップアップが表示されます。サーバーで。

SOCKSの使用について:

JMXとjstatdの両方を使用しようとして失敗しました。

SOCKSプロキシが機能しているかどうかわからないので、次のように接続しようとしました。

ssh -i ~/.ssh/starter.pem -v -D 9696 user@host

完全を期すために、もう一方の端でコマンドを次のように開始しました。

    java -Dcom.sun.management.jmxremote\
 -Dcom.sun.management.jmxremote.ssl=false\
 -Dcom.sun.management.jmxremote.authenticate=false\
 -Dcom.sun.management.jmxremote.port=3333 <app>

そして、ローカル側で、このVisualVmヘルプページへのリンクに従ってvisualvm接続を設定しました。

JMX接続では、visualvmでホストを右クリックし、プロンプトが表示されたらホストポートを入力して、マシン名とポートを設定しました。この時点で、下部のステータスバーは、visualvmがリモートマシンに接続しようとしていることを示しており、数分後に失敗します。

jstatd接続では、リモートプロセスが自動的に表示されることを期待していました。これは起こりませんでした...エラーメッセージなどはありませんでした。

靴下側では、次のメッセージが周期的に繰り返されます。

debug1: Connection to port 9696 forwarding to socks port 0 requested.
debug1: channel 2: new [dynamic-tcpip]
channel 3: open failed: connect failed: Connection timed out
debug1: channel 3: free: direct-tcpip: listening port 9696 for 50.16.35.69 port 3333, connect from 127.0.0.1 port 43909, nchannels 4
debug1: Connection to port 9696 forwarding to socks port 0 requested.
debug1: channel 3: new [dynamic-tcpip]
channel 2: open failed: connect failed: Connection timed out
debug1: channel 2: free: direct-tcpip: listening port 9696 for 50.16.35.69 port 1099, connect from 127.0.0.1 port 44644, nchannels 4

これは靴下チャンネルと関係があるのだろうか。以前にシングルポートをリモートマシンにトンネリングしたことがあるので、トンネリングの構成の問題であるとは想像できません。私は両側でubuntulinuxを実行しています。

読んでくれてありがとう :)

4

4 に答える 4

3

SOCKSプロキシでSSHトンネルを使用します。詳細については、この投稿を参照してください。

于 2012-10-11T06:30:07.560 に答える
2

私はちょうど2分前にこれをしました...

  • ポート8686にjmxを備えたリモートサーバー-このポートはロックダウンされています
  • リモートボックスのsshd_configには、「AllowTcpForwardingyes」またはコメントアウトする必要があります
  • ローカルポート8686(またはその他)をlocalhost:8686に転送するポートでパテsshセッションを開きます
  • ローカル転送ポートを指すVisualVmにローカルjmx接続を追加します
  • VisualVmは自動的にjvmを認識し、監視を開始します
于 2013-02-26T10:16:57.767 に答える
1

JMX / RMIは、RMIの場合、直接トンネリングするのが困難です。基本的に、サーバーはRMIスタブ定義を作成します。これは、サーバーに接続するための指示を備えていますが、調整している場合、スタブはサーバーからダウンしますが、方向はすべて間違っており、可能です。ここからそこに着きます。

これを解決する最も簡単な方法は、RMIコネクタを捨ててJMXMPを使用することです。基盤となるプロトコルは純粋なソケットであるため、トンネリングに完全に適合しています。

于 2012-10-10T18:25:30.123 に答える
1

これが私のために働いたステップです:

  1. この方法でリモートホストでejstatdを起動します(ejstatdフォルダー内):( mvn exec:java -Dexec.args="-pr 2000 -ph 2001 -pv 2002"「jstatd」タイプの接続に使用されます)
  2. これらの追加のJavaパラメータを使用してJavaアプリケーションを起動します:( -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.port=2003 -Dcom.sun.management.jmxremote.rmi.port=2003「JMX」タイプの接続に使用)
  3. これらの4つのポート(2000年から2003年までを含む)をトンネリングするリモートホストへのSSHセッションを開きます。たとえば、OpenSSHクライアントでは、次のパラメータを追加する必要があります。-L2000:localhost:2000 -L2001:localhost:2001 -L2002:localhost:2002 -L2003:localhost:2003
  4. JVisualVMを起動します
    1. 「ローカル」>「jstatd接続の追加...」>「カスタムの追加」を右クリックし2000、「ポート」の選択に「」と入力します。
    2. 「ローカル」>「JMX接続の追加...」を右クリックしlocalhost:2003、「接続」入力に「」と入力し、「SSL接続は不要」にチェックを入れます。
    3. Javaプロセスは2回表示されます。1つは「jstatd」接続タイプからのもので、もう1つは「JMX」接続タイプからのものです。

免責事項:私はオープンソースのejstatdツールの作成者です。

于 2016-11-03T14:32:33.337 に答える