2009-10-22 13 views
37

の上に私はVisual VM remotely over sshを読んだが、私はそれが私のために働いていなかったので、私は完全に:-(してください理解いませんでした誰かが、いくつかの例を与えることができると思う?VisualVMのは、SSH

ssh -D 9696 [email protected]visualvm.exe -J-Dnetbeans.system_socks_proxy=localhost:9696 -J-Djava.net.useSystemProxies=trueはVisualVMのを開始しますが、何のプロセスません(常にそうとは限りません)時々、「チャネル3:オープンに失敗しました:接続に失敗しました:接続が拒否されました」というメッセージが私のsshウィンドウに表示されます。

ヘルプ?

+0

ドンを確立しているJVMの構成の2つのポートを設定しますあなたはに接続する必要はありませんVisualVMからのリモートホスト?私は今すぐテストするマシンを持っていませんが、あなたは靴下プロキシを作成しただけで、まだ何かをしなければなりません。 –

+0

あなたのコメントありがとう - 私はいくつかの 'バリエーション'を試しましたが、それらのどれも働いていませんでした。 – bgraves

+0

2015年現在、jmxポートとrmiポートの両方をトンネルできます。[my answer](http://stackoverflow.com/a/32418821/241986) –

答えて

35

リモート側でjstatdを実行するか、またはJを指定する必要がありますhost:portを使用したMX接続。

のjstatd:その後

jstatd -J-Djava.security.policy=permissions.txt [-p port]

:ターゲットマシンにリモート接続を追加し、そのリモート接続の特性のjstatd接続を設定します。

(permissions.txtは、例えば、この含まれています

grant { 
    permission java.security.AllPermission; 
}; 

編集:コメントする(回答)

  1. ssh -D 9696 [email protected]を、リモートコマンドライン上で上記のようなのjstatd実行しますもしjstatdをデフォルトの1099以外のポートにしたい場合は、jstatdに-p引数を指定してください。
  2. ローカルマシン上でvisualvm.exe -J-Dnetbeans.system_socks_proxy=localhost:9696 -J-Djava.net.useSystemProxies=trueを実行
  3. 視覚的なVM内
  4. :新しいリモート接続を追加し、ホストとのjstatdのポートとしてリモート指定(1099デフォルトのために、または何のjstatdの実行時に-pで指定)

    あなたは今上のプロセスが表示されますリモート側のvisualvm

+0

申し訳ありませんが、私はそれを取得しません。リモート側でjstatd行を起動することはできますが、「ssh -D 9696 me @ remote」または「ssh me @ remote」で十分でなければなりませんか?私はまだvisualvmのためにプロキシのものが必要です - など。それは恥ずかしいですが、私はステップガイドで一歩が必要だと思います。 – bgraves

+0

1)ssh -D 9696 me @ remoteとリモートコマンドラインで上記のようにjstatdを実行します。 jstatdをデフォルトの1099以外のポートにしたい場合は、jstatdに-p引き数を指定してください。 2)ローカルマシン上でvisualvm.exe -J-Dnetbeans.system_socks_proxy = localhost:9696 -J-Djava.net.useSystemProxies = trueを実行します。 3)ビジュアルVM内で新しいリモート接続を追加し、 jstatdのポート(デフォルトは1099、またはjstatdの実行時は-pで指定したもの) これでリモート側のプロセスがvisualvmに表示されるはずです – ankon

+0

ああ、今は動作します - ありがとう! :-) – bgraves

2

私は、プロキシのjvm引数では動作しないことが判明しました。バージョン1.3.3以上(ビルド111013)。 [ツール]> [オプション]> [ネットワーク]でプロキシを設定してくれました。また、システム全体のプロキシ設定は動作するはずですが、それは他のすべてのネットワーク接続に影響します。

3

私もJVM引数ことがわかった:

-J-Dnetbeans.system_socks_proxy=localhost:9696 -J-Djava.net.useSystemProxies=true 

は、私は1.3.2を使用していたビルドでは動作しませんでした。

私はツール>オプション>ネットワークを使用し、SOCKS設定で手動で設定しました。

しかし、VisualVMはまだリモートプロセスを見つけられませんでした。その後、ローカルホストの「プロキシホストなし」を削除しました。

9

は私がローカルホスト上の結合のjstatdの問題を持っていたので、私は、このパラメータを使用jvisualvmにも

jstatd -J-Djava.security.policy=allPerm.policy -J-Djava.rmi.server.logCalls=true -p <port> -J-Djava.rmi.server.hostname=<my ip> 

を入力しなければならなかった代わりに

jvisualvm -J-DsocksProxyHost=localhost -J-DsocksProxyPort=<socks-port> 

このようにして、SSHプロキシによって接続し、私は私のリモートマシンの実際のIPアドレスを使用することができます。私は自分自身my siteのフルリマインダー作っこの回答から盗む

..私はあなたの方法で、このためankon 感謝を気にしないことを望む :)

+0

UIのプロキシ設定が私にとっては機能しません。コマンドラインで動作します。ありがとう。ところで、私はバージョン1.8.0_25(ビルド140407)を使用しています –

+2

visualvm GUIでSOCKSプロキシを定義することができませんでした。しかし、これらのCLI引数は正常に機能しました。 – Will

11

私は標準のSSHトンネリングを使用して、別のソリューションを持っていますファイアウォールポートを開くことはできません。 私の場合、SOCKSプロキシは動作しません。

オプションを使用してJVMを起動し


-Dcom.sun.management.jmxremote =真
-Dcom.sun.management.jmxremote.ssl = falseを
-Dcom.sun.management.jmxremote.authenticate =偽
-Dcom.sun.management.jmxremote.port = [PORT1]
-D java.rmi.server.hostname = localhostを
-Dcom.sun.management.jmxremote.rmi.port = [ポート2]

重要な部分は「server.hostname = localhost」です。さらに、両方のポート(connect + "random" RMIポート)を明示的に定義すると、 "jmxremote.rmi.port"にはJava 7のアップデート4以上が必要です(この情報をチェックしませんでした。 "lsof -i"サーバーマシンで実際に使用されているポートを確認してください)。サーバーへのssh経由

(もちろん、あなたが認証やSSLを使用する場合があります。)

接続し、ローカルホストにローカルのポート1ポート2を転送:ポート1 | 2サーバー。

VisualVMでは、localhost:port1へのJMX接続を開きます(プロキシ設定なし)。

+1

素晴らしい情報...これは私のためにSSHトンネリングを使って解決しました。キーは、2つのポートを設定して転送する必要がありました。 – Shane

+1

FYI * port1 *は* port2 *に等しいことができるので、1つのポートしか使用できません –

+0

あなたは私の一日の男を作った!あなたは獣です。 – Aladdin

0

それはSOCKSプロキシを使用していないとして、私は(私はjvisualvmに関連するものを見ていない、それはjvisualvmで動作させることができませんでしたjvisualvmの異なるバージョン(https://visualvm.github.io/download.htmlから例えば最新)

をお試しくださいssh -v -D 9696で)。リモートアプリケーションはjvisualvmには登場しませんでした。 VisualVMはしかし、数秒後にそれらを示した。

3

jVisualVMをssh経由でリモートアプリケーションに接続する際に、同じ問題が発生していました。

This Tutorial私の問題を解決するのに役立ちました。確認してこの問題を解決するためにhttp://issamben.com/how-to-monitor-remote-jvm-over-ssh/

  • あなたは

    -Dcom.sun.management.jmxremote.ssl=false 
    -Dcom.sun.management.jmxremote.authenticate=false 
    -Dcom.sun.management.jmxremote.port=9010 
    -Dcom.sun.management.jmxremote.rmi.port=9011 
    -Djava.rmi.server.hostname=localhost 
    -Dcom.sun.management.jmxremote.local.only=false 
    
  • SSHトンネルが正しく

    ssh -i yourPermissionFile.pem -l username 101.101.101.101 -L 9010:localhost:9010 -L 9011:localhost:9011 
    
+0

これを共有していただきありがとうございます!それは私のために働いた –

関連する問題