0

OK、メモリ リークが発生しました。ほとんどの場合、GUI または ExecutorCompletionService にあります。プログラムメモリを監視するためのオプションは何ですか?

はい、メモリ不足エラーが発生します。ダンプ ファイルを生成するために、Eclipse の vm 引数に -XX:+HeapDumpOnOutOfMemoryError を設定しました。状況は、計算集約型タスクのスレッド プールを実行している ExecutorCompletionService がある場合です。スレッドは gui スレッドに中間結果を通知します。

現在、ExecutionController クラスの単体テストを見直しているところですが、メモリ監視を単体テストに統合できるかどうか疑問に思っていました。

プロファイリング オプションに関しては、先月これを成功させましたが、使用した手順やプロ フィラーを覚えていません。別のウィンドウを開き、外部で実行されているモニターからリアルタイムのスナップ ショットを監視しました。メモリ リークが発生した正確なクラス メンバーを特定するのが困難だったことを漠然と覚えていますが、前の問題を解決するのに十分な情報が提供されました。

近い将来、提案された監視オプションを試してみます。

4

2 に答える 2

1

メモリ リークは、JVM のスタック サイズまたはヒープ サイズの超過が原因である可能性があります。メモリ リークを特定する最初のステップは、メモリ リークがあるかどうかを確認することです。JVM コマンド ライン オプションを使用して、ヒープとスタック スペースを増やしてみてください。-xmx-xssは、それぞれヒープとスタックのサイズを増やすオプションです。

確認されたら、問題のあるコード ブロックに絞り込んでリークを特定するのに役立つさまざまなツールがあります。私のお気に入りは、メモリ不足の例外が発生したと仮定して、実行中のスレッドのダンプを取得し、ダンプを調べることです。詳しくはお試しjava -Xrunhprof:helpください。Eclipse プラグインである Memory Analyzer (MAT) を使用して、ダンプを分析します。

また、Java Memory Extensionsは、スレッド、ヒープ、およびスタック サイズに関して、実行中の JVM をイントロスペクトする方法について詳細を提供します。JDK 1.6 以降を使用している場合は 、この目的にも役立つプロファイリング ツールであるビジュアル vmが同梱されています。

于 2013-04-08T02:00:49.140 に答える
0

JDK 6 以降、 と呼ばれるプロファイリング ツールがディレクトリjvisualvmに含まれています。\binCPU 使用率をスキャンしたり、メモリやスレッドを監視したりできます。

詳細については、こちらをご覧ください。

于 2013-04-08T01:56:02.883 に答える