JMXRemoteパラメータが設定されたTomcatインスタンスがあります。ローカルVisualVMはCPUではサンプラーを取得できますが、メモリでは取得できません。 「メモリサンプリング:利用できません。ターゲットアプリケーションに接続できません。アプリケーションがサポートされているJDK 6またはJDK 7で実行されていることを確認してください」という要約で、メモリボタンはグレー表示されます。
JMXRemoteパラメータ:
-Dcom.Sun.management.jmxremote
-Dcom.Sun.management.jmxremote.port=9086
-Dcom.Sun.management.jmxremote.ssl=false
-Dcom.Sun.management.jmxremote.authenticate=false
Tomcat JDKバージョン:
JDK1.6.0.30
VisualVMバージョン:
Version: 1.6.0_30 (Build 1320-110325); platform 110131-9c8b3bfb3a1e
System: Windows Server 2008 R2 (6.1) , AMD64 64bit
Java: 1.6.0_30; Java HotSpot(TM) 64-Bit Server VM (20.5-b03, mixed mode)
Vendor: Sun Microsystems Inc., http://Java.Sun.com/
Environment: Cp1252; en_US (visualvm)
Userdir: C:\Users\Administrator\AppData\Roaming\.visualvm\7
Clusters: C:\Program Files\Java\jdk1.6.0_30\lib\visualvm\platform
C:\Program Files\Java\jdk1.6.0_30\lib\visualvm\visualvm
C:\Program Files\Java\jdk1.6.0_30\lib\visualvm\profiler
Tomcatバージョン:
Tomcat 6.0.32
VisualServerとTomcatの両方をWindows Server 2008で実行しています。何か問題がありましたか?
以前にも同じ問題がありました。あなたはjvisualvmホームページからバージョンをダウンロードしたに違いありませんよね? しないでください!新しいjdk 1.7を使用する場合、VisualVMはすでにjdkフォルダーにパッケージ化されています。このバージョンを使用すると、メモリサンプルに問題はありません。
このブログ投稿 は、メモリサンプリングが機能するためには、JVisualVMとTomcatの一時ディレクトリが同じである必要があると信じるようにさせます。投稿のコメントの1つ:
一時ディレクトリは、JVisualVMが使用するものに設定する必要があります。これは、VisualVMシステムのプロパティタブ(Java.io.tmpdir)から検出できます。 CATALINA_TMPDIRディレクトリを適切に設定すると、これは美しく機能しました。
私はこれと同じ問題に遭遇し、上記の回答で問題が解決しましたが、方法を理解するのにしばらく時間がかかりました。他の誰かがまだ問題を抱えており、スレッドの最後まで進んだ場合に備えて、別にインストールしたJDKではなく、Eclipseを介して構成されたweblogicサーバーの一部であるJDKを使用していました。私はまだジュニアプログラマーで、Eclipseの設定を確認してインストール済みのJREを確認するまで、2と2を組み合わせていませんでした。
Weblogic jdkからjvisualvm.exeを実行し、すべてが機能しました。
VisualVMのバージョンがJVMとまったく同じであることを確認します。
VisualVMは非常にバージョン固有です。私はそれがまだかなり急速に発展していると思います。
(解決策になる可能性があるため、回答として再投稿されています)
そして私も同じ問題を抱えています。
私は常にサービスとしてTomcatを起動し、jmx接続を介してそれをvisualvmに接続しました。
Catalina.batを修正した場合:
set Java_OPTS=%Java_OPTS%
-Dcom.Sun.management.jmxremote=true
-Dcom.Sun.management.jmxremote.port=9090
-Dcom.Sun.management.jmxremote.ssl=false
-Dcom.Sun.management.jmxremote.authenticate=false
そしてstartup.batでそれを起動し、visualvmはTomcatを自動的に決定し、メモリサンプリングはアクティブでした。
私は同じ問題を抱えていますが、環境が異なります。サーバーはLinuxマシン、クライアントはWindows 7マシンでしたが、問題は同じです。
解決策は、同じマシンで、ターゲットアプリケーションを実行している同じユーザーでjvisualvmを起動することでした。他のユーザー(例:root)でjvisualvmを実行すると、メモリボタンが灰色になりました。
私はJVisualVMで同様の問題に直面したことがあります。それについても質問しました here
いくつかの洞察/アドバイス:
64ビットjvmが32ビットjdkと同じマシンにインストールされているかどうか(それらが実行されておらず、すべての環境変数が適切に定義されているかどうか)をダブルチェックします。 )(はい、それは私たちにとって合理的に聞こえないことを知っています、Java開発者)
それが機能しない場合は、持っているすべてのjdkをアンインストールし、必要な1つだけをインストールしてください。それは問題を解決することができます。
ピーターがこれらのものは新しくて進化していると言ったので、それが問題を解決するのに役立つことを願っています
JREがある場合は、VisualVM/JDKが32ビットコピーであることを確認してください。 Eclipseを使用している場合は、[インストールされたJRE]セクションで選択したJREを確認します。
まず、 JMXを有効にする必要があります 。 JMXをアクティブにするために必要なリンクされたコマンドライン環境変数を追加します(まだの場合)。
環境変数CATALINA_TMPDIR
は、[ローカル]> [VisualVM]の[システムプロパティ]タブに表示されるJVisualVMと一致するように設定する必要があります。これを開くには、左側の[アプリケーション]ペインで「VisualVM」というラベルの付いたエントリをダブルクリックします。
環境変数は、「アカウントの環境変数を編集」という環境を検索することで設定できます。新規...>名前と値を入力します。
VisualVMの一時ディレクトリを別の場所にしたい場合は、コマンドラインからVisualVMを起動して引数を追加する必要があります。
C:\Program Files\Java\jdk1.8.0_65\bin>jvisualvm.exe -J-Djava.io.tmpdir=C:\Users\You\Temp
これが同様の問題の私の解決策です: https://stackoverflow.com/a/16330238/71548
このエラーは次の方法で解決できます
$ ssh -Y user @ remotemachine
$ wget http://Java.net/projects/visualvm/downloads/download/release135/visualvm_135.Zip
$ unzip visualvm_135.Zip
$ cd visualvm_135/bin
$ ./visualvm
このvisualvmのインスタンスは、メモリとCPUのサンプリングを含む、フル機能を備えています。
詳細はこちら: http://shahriarinia.blogspot.com/2013/05/Java-cpumemory-heap-usage-monitoring.html