私は読んだ Visual VM sshを介してリモートで ?
ssh -D 9696 [email protected]
およびvisualvm.exe -J-Dnetbeans.system_socks_proxy=localhost:9696 -J-Djava.net.useSystemProxies=true
はvisualvmを起動しますが、外部マシンのプロセスは表示されません(visualvm自体のようなローカルプロセスのみ)。さらに、(常にではないが)sshウィンドウに「チャネル3:オープンに失敗しました:接続に失敗しました:接続が拒否されました」というメッセージが表示されることがありました。
何か助け?
リモート側でjstatdを実行するか、Host:portを使用してJMX接続を指定する必要があります。
Jstatd:
jstatd -J-Djava.security.policy=permissions.txt [-p port]
その後:ターゲットマシンにリモート接続を追加し、そのリモート接続のプロパティでjstatd接続を構成します。
(permissions.txtには、たとえば次が含まれます。
grant {
permission Java.security.AllPermission;
};
編集:(コメントへの回答)
ssh -D 9696 me@remote
、およびリモートコマンドラインで上記のようにjstatdを実行します。 jstatdをデフォルトの1099とは異なるポートに配置する場合は、jstatdに-p引数を使用します。visualvm.exe -J-Dnetbeans.system_socks_proxy=localhost:9696 -J-Djava.net.useSystemProxies=true
ローカルマシン上ビジュアルvm:新しいリモート接続を追加し、jstatdのホストおよびポートとしてremoteを指定します(デフォルトは1099、またはjstatdの実行時に-pで指定したもの)
これで、visualvmのリモート側のプロセスが表示されるはずです。
標準SSHトンネリングおよびファイアウォールポートなしを使用して開く別のソリューションがあります。私にとって、SOCKSプロキシは機能しません。
オプションを使用してJVMを起動します。
-Dcom.Sun.management.jmxremote = true
-Dcom.Sun.management.jmxremote.ssl = false
-Dcom.Sun.management.jmxremote.authenticate = false
-Dcom.Sun.management.jmxremote.port =[port1]
-D Java.rmi.server.hostname = localhost
-Dcom.Sun.management.jmxremote.rmi.port =[port2]
重要な部分は「server.hostname = localhost」です。さらに、両方のポート(接続+「ランダム」RMIポート)を明示的に定義します。「jmxremote.rmi.port」には少なくともJava 7 update 4(どこかで読んで、この情報を確認しませんでした) -サーバーマシンで「lsof -i」を使用して、実際に使用されているポートを確認します。
(もちろん、認証またはSSLを使用できます。)
Sshを介してサーバーに接続し、ローカルport1およびport2に転送しますlocalhost:port1 | 2サーバー。
VisualVMで、localhost:port1へのJMX接続を開きます(プロキシ設定なし)。
JVisualVMをssh経由でリモートアプリケーションに接続しているときに同じ問題が発生していました。
このチュートリアル は、問題の解決に役立ちました。 http://issamben.com/how-to-monitor-remote-jvm-over-ssh/
この問題を解決するには、次のことを確認してください。
jvm構成で2つのポートを設定します
-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
ローカルホストでjstatdバインディングの問題が発生したため、入力する必要がありました
jstatd -J-Djava.security.policy=allPerm.policy -J-Djava.rmi.server.logCalls=true -p <port> -J-Djava.rmi.server.hostname=<my ip>
また、jvisualvmの場合、代わりにこのパラメータを使用します
jvisualvm -J-DsocksProxyHost=localhost -J-DsocksProxyPort=<socks-port>
このように、sshプロキシで接続すると、リモートマシンの実際のIPアドレスを使用できます。
この答えを盗んで、私は my site ..で自分自身に完全なリマインダーを作成しました。
また、jvm引数:
-J-Dnetbeans.system_socks_proxy=localhost:9696 -J-Djava.net.useSystemProxies=true
1.3.2を使用しているビルドで動作しませんでした。
そのため、[ツール]> [オプション]> [ネットワーク]を使用し、SOCKS設定で手動で設定しました。
しかし、VisualVMはまだリモートプロセスを見つけられませんでした。次に、localhostをリッスンしている「プロキシホストなし」を削除しました。これによりおそらくブロックされたためです。
プロキシのjvm引数で機能しないことがわかりました。少なくともバージョン1.3.3(ビルド111013)では。 [ツール]> [オプション]> [ネットワーク]でプロキシを設定するとうまくいきました。また、システム全体のプロキシ設定も機能するはずですが、定義により他のすべてのネットワーク接続に影響します。
Jvisualvmの別のバージョンを試してください(例: https://visualvm.github.io/download.html の最新版)
SOCKSプロキシを使用しなかったため、jvisualvmで動作させることができませんでした(ssh -v -D 9696でjvisualvmに関連するものは表示されませんでした)。リモートアプリケーションはjvisualvmに登場しませんでした。ただし、VisualVMは数秒後にそれらを表示しました。
私はこの質問が古いことを知っていますが、jstatを使用するよりも簡単な解決策を提案します。
sSHとJvisualvmのみを使用する
Jvisualvmを使用して簡単にメモリリークを検出し、CPUを監視します。RAMアプリケーションの