web-dev-qa-db-ja.com

VisualVM Profilerがアプリケーションをプロファイリングしないのはなぜですか?

単純な1ファイルを作成しましたJavaループを反復処理し、いくつかの関数を呼び出し、メモリを割り当て、いくつかの数値を追加します。EclipseのRun As->Java Application

実行中のアプリケーションは、Java VisualVM Localの下に表示されます。

そのアプリケーションをダブルクリックして、[プロファイラー]タブに移動します。

デフォルト設定は次のとおりです。

Start profiling from classes: my.main.package.**

Do not profile classes: Java.*, javax.*, Sun.*, sunw.*, com.Sun.*

CPUをクリックします。 CPUおよびMemoryボタンはグレー表示されます。何も起こりません。

Statusprofiling inactive

アプリケーションが終了すると、Statusapplication terminated

ここで何が間違っていますか?微調整する必要がある設定はありますか?アプリケーションを起動するときにVMフラグを設定する必要がありますか?

31
Luke

これは、JVisualVMがJava.io.tmpdirディレクトリ(通常はWindowsシステムのC:\Users\[your username]\AppData\Local\Temp\hsperfdata_[your username])でデータを見つけることを期待しているためです。

I assume JPS、JVisualVMなどが期待する通常の場所ではなく、Eclipseは独自の一時フォルダーにデータを配置しますか?

その場合は、jvisualvm -J-Djava.io.tmpdir=[Eclipse's temp directory]を使用してJVisualVMを呼び出して、そのデータの場所を明示的に伝えてください。

hsperfdata_$USERフォルダーが見つからない場合は、通常のコマンドラインJavaの方法でEclipseの外部でアプリケーションを実行するだけです。

また、1.6.0_23前後に導入されたtempフォルダー(大文字と小文字の区別)に影響するバグがあるため、より新しいJava 6(または7))ビルドに更新することでメリットが得られることにも注意してください。

22
Michael

Java 1.7.0_45アップデートの後、同じ問題が発生しました。次のフォルダを削除する必要がありました。

C:\users\'username'\AppData\Local\Temp\hsperfdata_'username'

そうすると、すべてが魅力のように機能します。

34
Kuba

Mikaveli、Kuba、Somaiah Kumberaは素晴らしいソリューションを提供してくれました。物事を機能させるために私がしたことを追加するだけです。

最初に場所を確認しましたC:\users\'username'\AppData\Local\Temp\hsperfdata_'username'

Eclipse内で実行されている私のプログラムのプロセスIDで命名されたファイルはありませんでした。

単にプログラムを停止し、次のパラメーターをプログラムの実行構成に追加しました(実行構成->引数-> VM引数

-Djava.io.tmpdir=C:\users\'username'\AppData\Local\Temp\hsperfdata_'username'

プログラムを再度開始しました。まだプロファイルできませんでした。しかし、現在、指定された一時ディレクトリにプロセス用のファイルが作成されています。

その後、VisualVMを簡単に再起動するだけでうまくいきました。

2

私は同じ問題を抱えていましたが、次の症状があります:

C:\ Users\t852124\AppData\Local\Tempに作業ディレクトリを指定してjettyを起動しました

Jettyはhsperfdata_ディレクトリを作成していましたが、プロセスIDを設定していませんでした

したがって、visualVMを起動したときに、Javaプロセス情報を取得できませんでした。

-Djava.io.tmpdir = C:/ temp/Javaオプションでjettyを起動することでこれを解決しました。

さて、私がjettyを起動したとき、プロセスIDはhsperfdata_ディレクトリにファイルとして作成されました。したがって、visualVMを起動したときに、ローカルのJavaプロセスを確認できました

1
Somaiah Kumbera

LinuxでVisualVM 1.3.3を使用している場合、CPUプロファイラーとCPUサンプラーを有効にするには、~/.visualvm/1.3.3/のアプリケーションのローカル設定を削除する必要があります。

また、/ usr/bin/jvisualvmにはOpenJDKへのハードコードされたパス(jdkhome変数で設定)が含まれていることに注意してください。

0
divanov

同じ問題が発生し、昇格された特権(管理者権限)でVisualVMを実行すると問題が解決しました。

0
TomS