9

Tomcat で実行されている負荷の軽い Web アプリケーションを JMX コンソールを使用して分析したところ、「PS Old Gen」はゆっくりではあるが一定の速度で成長していることがわかりました。200MB から始まり、1 時間あたり約 80MB 増加します。

CPU は問題ありません。平均で 0 ~ 1% で動作しますが、どこかでメモリ リークが発生するため、展開後数日で不安定になります。

ヒープに割り当てられているオブジェクトを確認するにはどうすればよいですか? あなたが知っている良いチュートリアルやツールはありますか?

4

6 に答える 6

2

JDK開発ツールの1つであるjmapを試すことができます。出力でjhatを使用すると、Webブラウザーを使用してヒープダ​​ンプをウォークできます。

簡単な説明については、この回答を参照してください。

これは非常に頻繁に発生するため、SOでこれらのツールを検索すると、いくつかの選択肢が見つかるはずです。

于 2008-12-16T15:46:31.710 に答える
1

私はIBMのalphaWorksのHeapAnalyzerツールを使用して成功しました。Javaのヒーププロファイルhprofから出力を取得し、それを分析して、最も可能性の高いメモリリークを示します。

于 2008-12-16T15:46:55.267 に答える
1

ここで私の答えを見てください:

Java メモリの問題を診断するための戦略

また、ここにもヒントがあります。

解放されていないオブジェクトを保持しているものをどのように把握できますか?

于 2009-01-08T11:26:36.060 に答える
1

そうでないと証明できない限り、あなたが見ているものは正常です。古いスペースで GC が発生したときに追加の「消費スペース」がなくなると、ヒープを分析する必要がなくなります。ある時点で、使用済みスペースが最大ヒープ サイズに達すると、使用しているデフォルト GC によって一時停止が発生し、その後、使用済みメモリが大幅に減少するはずです。GC 後にダウンしない場合にのみ、それらのオブジェクトにまだ保持されているものに興味があるかもしれません。

于 2012-11-25T21:43:48.350 に答える
1

NetBeans プロファイラーを使用できます。これには 2 つのモードがあり、ide から直接プロファイリングされた tomcat を起動する (localhost の場合) か、提供された JAR とサーバー上でいくつかの実行構成を使用してリモート プロファイリングを使用します。

メモリリークのプロジェクトで使用しましたが、役に立ちました。

于 2008-12-16T16:10:47.560 に答える
0

JRockit Mission Controlは、JVMへの接続中にメモリリークを分析できます。常にスナップショットを撮る必要はありません。これは、ヒープが大きいサーバーがある場合に役立ちます。

ツールをJVMに接続するだけで、最も成長しているオブジェクトのタイプを確認できるトレンドテーブルが表示され、それらのオブジェクトへの参照を調べることができます。JVMの実行中に割り当てトレースを取得することもできるため、アプリケーションのどこにオブジェクトが割り当てられているかを確認できます。

こちらから無料でダウンロードできます

于 2008-12-18T23:49:58.020 に答える