質問

sshを介したリモートVisual VM

ssh -D 9696 login@ip.of.external.machine および visualvm.exe -J-Dnetbeans.system_socks_proxy = localhost:9696 -J-Djava.net.useSystemProxies = true はvisualvmを起動しますが、外部マシンのプロセスは表示されません(visualvm自体のようなローカルプロセスのみ)。さらに、(常にではないが)メッセージ「チャネル3:オープンに失敗しました:接続に失敗しました:接続が拒否されました」を受け取りました。私のsshウィンドウで。

サポートが必要ですか

役に立ちましたか?

解決

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

Jstatd:

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

その後:ターゲットマシンにリモート接続を追加し、そのリモート接続のプロパティでjstatd接続を設定します。

(permissions.txtには、たとえば次が含まれます:

grant {
  permission java.security.AllPermission;
};

編集:(コメントへの回答)

  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. visual vm:新しいリモート接続を追加し、リモートをjstatdのホストおよびポートとして指定します(デフォルトは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"です。さらに、両方のポート(connect +" random" RMI port)、" jmxremote.rmi.port"を明示的に定義します。少なくともJava 7アップデート4が必要です(どこかで読んだのですが、この情報を確認しませんでした-サーバーマシンで「lsof -i」を使用して、実際に使用されているポートを確認してください)。

(もちろん、認証またはSSLを使用できます。)

sshを介してサーバーに接続し、ローカルの port1 および port2 をサーバーのlocalhost:port1 | 2に転送します。

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

localhostで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アドレスを使用できます。

この回答を盗み、私のサイトで完全なリマインダーを作成しました.. 私 アンコンを気にしないでください ところでこれをありがとう:)

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
    

jvm引数:

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

1.3.2を使用しているビルドでは機能しませんでした。

したがって、ツールを使用しました&gt;オプション&gt;ネットワークし、SOCKS設定で手動で設定します。

しかし、VisualVMはまだリモートプロセスを見つけられませんでした。次に、「プロキシホストなし」を削除しました。これはおそらくそれをブロックするため、localhostをリッスンする

プロキシのjvm引数で機能しないことがわかりました。少なくともバージョン1.3.3(ビルド111013)では。ツールでプロキシを設定&gt;オプション&gt;ネットワークは私のために働いた。また、システム全体のプロキシ設定も機能するはずですが、定義により他のすべてのネットワーク接続に影響します。

jvisualvmの別のバージョンを試してください(例: https://visualvm.github.io/ download.html

SOCKSプロキシを使用しなかったため、jvisualvmで動作させることができませんでした(ssh -v -D 9696でjvisualvmに関連するものは表示されませんでした)。リモートアプリケーションはjvisualvmに登場しませんでした。ただし、VisualVMは数秒後にそれらを表示しました。

この質問は古いことは知っていますが、jstatを使用するよりも簡単な解決策をお勧めします。

SSHとJvisualvmのみを使用する

  1. sockproxyを使用したssh(ex ssh -D 6666 host@123.123.123.123)
  2. sockでjvisualvmを実行します(jvisualvm.exe -J-DsocksProxyHost = localhost -J-DsocksProxyPort = 6666)
  3. JXMホストを追加(例:234.234.234.234:16000)

jvisualvmを使用して簡単にメモリリークを検出し、アプリケーションのCPU、RAMを監視します

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top