54

Visual VMをssh経由でリモートで読んだことがありますが、うまくいかなかったので完全には理解していないと思います:-(誰か例を教えてください。

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

何か助けはありますか?

4

9 に答える 9

46

リモート側で 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. ビジュアル vm: 新しいリモート接続を追加し、リモートをホストとして指定し、jstatd のポートを指定します (デフォルトでは 1099、または jstatd の実行時に -p で指定したもの)。

    これで、リモート側のプロセスが visualvm に表示されるはずです

于 2009-10-26T23:49:45.990 に答える
29

標準の SSH トンネリングを使用し、ファイアウォール ポートを開く必要のない別のソリューションがあります。私の場合、SOCKS プロキシは機能しません。

次のオプションを指定して
JVMを
起動します 。 = [ポート1] -D java.rmi.server.hostname=localhost -Dcom.sun.management.jmxremote.rmi.port= [ポート2]



重要な部分は「server.hostname=localhost」です。さらに、両方のポート (connect + "random" RMI port) を明示的に定義します。実際に使用されているポートを確認するためのサーバー マシン)。

(もちろん、認証や SSL を使用することもできます。)

ssh 経由でサーバーに接続し、ローカルポート 1とポート2 をサーバーの localhost: port1 |2 に転送します。

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

于 2015-07-02T13:23:30.897 に答える
13

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

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

于 2015-03-15T11:17:41.837 に答える
5

また、jvm 引数が次のこともわかりました。

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

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

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

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

于 2012-10-24T12:09:37.080 に答える
3

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

于 2011-11-24T03:13:41.967 に答える
0

別のバージョンの jvisualvm を試してください (たとえば、https://visualvm.github.io/download.htmlの最新のもの) 。

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

于 2017-01-23T11:32:35.833 に答える