web-dev-qa-db-ja.com

VisualVMは、すべてのローカルアプリケーションで「このJVMでサポートされていません」?

アプリケーションのロードとテストにはすでに長い時間を費やしましたが、プロファイルを作成する必要があります。しかし、不運なことに、VisualVMは、ローカルアプリケーションで常に「このJVMでサポートされていません」と表示しますか?

アプリケーションは、VisualVMと同じJVMで開始されました。

41
Loc Phan

(少なくともWindowsでは)特定のJVMと組み合わせてVisualVMを実行するための小さなバッチファイルを簡単に作成できることがわかりました。これは私にとって賢明です)。フォルダー「S:\ applications\visualvm\bin \」に2つのバッチファイルを作成しました。

run_32.bat:

@echo off
START "VisualVM 32" visualvm.exe --jdkhome "C:\Program Files (x86)\Java\jdk1.7.0_07"

run_64.bat:

@echo off
START "VisualVM 64" visualvm.exe --jdkhome "C:\Program Files\Java\jdk1.7.0_07"

明らかに、すべてのパスはシステムによって異なる場合がありますが、一般的な考え方は引き続き正しく機能するはずです(Windowsのすべての64ビットバージョン)。利点は、VisualVMをJavaアプリケーションなどと組み合わせて64ビット用に使用したいときに32ビットバッチファイルを使用できることです。

「開始」コマンドには、バッチファイルが終了するのを待たずにアプリケーションを起動するという唯一の利点があるため、コマンドプロンプトウィンドウはすぐに閉じます。これはVisualVMの機能ではなく、Windowsバッチファイルインタープリターの機能です。

16
Rolf Viehmann

VisualVMは、プロファイリングするプログラムと同じJVM-少なくともJava 6-)で実行する必要があります(同じである必要もありますユーザーですが、このメッセージは適用されません)。

私はそれがあなたの状況でまったく同じJVMだったことをトリプルチェックします。

私の場合、JVMが一致していても(両方とも64ビット)、物事を機能させる唯一の方法は、監視対象のJVMに引数-Dcom.Sun.management.jmxremoteを送信することでした。また、Java Mission Control(JMC))を介した接続に問題がある場合にも機能します。

JMXのドキュメント によると、これは引数の動作です:

このプロパティを設定すると、Java VMプラットフォームのMBeansが登録され、JMXクライアントアプリケーションがローカルJavaプラットフォーム、つまり、Java VM JMXクライアントと同じマシンで実行されている。

これは自動的に有効になるはずでしたが、何らかの理由で私のLinuxにはありませんでした。

11
Rafael

Linuxの場合:/ etc/hostsが「ホスト名」の有効なIPアドレスを正しく参照していることを確認してください。

3
user3356656

私もこの問題に出会いました。私の場合は、LinuxではTomcat_userでTomcatを起動しましたが、rootユーザーでjvisualvmを実行しています。 rootユーザーでTomcatを起動した後、動作します。

2
Jacky

私が見つけた問題は、@ user3356656からのヒントのおかげで、マシンが1つのIP上にあるときにプログラムを起動し、別のIP上にあるときに接続しようとすると失敗することです。

2
Paul Wagland

ご覧のとおり、32ビットJVMでVisualVMを実行しています

32ビットJVMをアンインストールする必要はありません。 VisualVMにツアー64ビットJVMを使用するように指示するだけです。

永続的に変更する場合は、編集できます

visualvm_13\etc\visualvm.confで、jvmのパスをここで指定します

2
Jayanth Suvarna

VisualvmがWindows 7でのローカルTomcatインストールを検出する問題が発生していました。手動で接続できましたが、メモリスナップショットやvisualgcプラグインなどが有効になりませんでした。同じJVMバージョン、一時ファイルのアクセス許可などを使用していることを確認しました。機能しませんでした。その後、最初にvisualvmを起動し、次にTomcatを起動すると問題が解決することがわかりました。

2
edw5423619

私もローカルのTomcatで同じ問題を抱えています。stackoverflowの解決策を探しています。いくつかの深刻なデバッグの後、VisualGCにはtool.jarファイルからGC情報を取得する権限がないことがわかりました。

リンクで

http://docs.Oracle.com/javase/7/docs/technotes/tools/share/jstatd.html#SECURITYhttps://stackoverflow.com/a/42107355/ 3876619

問題を解決するための手順に従います

1)許可ファイルを作成する

vim /tmp/tools.policy

追加

grant codebase "file:${Java.home}/../lib/tools.jar" {
   permission Java.security.AllPermission;
};

それを保存

2)/tmp/tools.policyをJVM起動パラメーターに追加します

-Djava.security.policy=/tmp/tools.policy

3)SudoでjvisualVmを実行する

1

次の動作を再現できます。 jvisualvmを開くためのメニュー項目を右クリックするJavaアプリケーションがあります。このJavaアプリケーションを、batファイルからスタンドアロンセットアップとして実行しています。これは、%path%およびその他の必要なJDKなどの環境変数を適宜変更して、環境を形成することを意味します。アプリケーションを起動するBATは、非管理者として実行中としてマークされます。環境は64ビットJDKを指します。次に、他のJavaアプリケーションを管理者として起動します。 VMは、同じ64ビットJDKソースから存在します。次に、右クリック(つまり、非管理者)で最初のアプリからjvisualvmを起動します。 jvisualvmの「アプリケーションリスト」でアプリを表示できますが、「システムプロパティ」をクリックするとエラーが発生します。メッセージは「このJVMではサポートされていません」です。 JVM引数が公開されます。

解決策は他のいくつかの以前のコメントと同様です:管理者として右クリックjvisualvm-starterを起動すると、「システムプロパティ」も表示されます。確かに、JDKが32ビットで、他の64ビットであれば機能しません。行ったことがある。

私は、この小さな半分の作業が進行中のため、この概念をここに追加する必要があると考えました。

1
Kursk

私の問題はJVMの最適化でした--XX:+PerfDisableSharedMemフラグはVisualGCを破壊します。これは、jpsがリストにアプリを表示しない場合に明らかです。

1
Tatu Lahtela

名前をWindowsユーザーに変更し、すべて小文字に設定し、PCを再起動すると、すべて正常に動作するようになりました。

0

私にとって、その理由は、JVMプロセスを持つ別のユーザーで「jstatd」を実行したからです。 LinuxにはJVMスレッド(Tomcat)を起動する特別なユーザーがいますが、jstatdプロセスはルートで起動します。 rootを使用してjpsを実行する場合、他のユーザーに属するJVMスレッドの情報は表示できません。それが問題です。 rootによって開始された「jstatd」プロセスを強制終了し、JVMプロセスの所有者にsuし、「jstatd」プロセスを再起動します。

0
Raul