2011-01-07 19 views
2

私は、Tomcat 5で動作しているアプリケーションが1Gigのメモリで始まり、クライアントからの要求の受信を開始すると、メモリが100MBまで落とされてトラブルが始まることに気付きました。私は、 "Free Memory"、 "Total Memory"、 "Max Memory"が表示されているJVMセクションのtomcatの/ manager/statusページを見ています。Tomcatメモリの問題

これはメモリリークの指標ですか?クライアントマシンからの要求がなくても、メモリは自動的に解放されないようです。

+2

「メモリが落ち始める」とはどういう意味ですか? – skaffman

+0

memに関連するオプションは何ですか? – hvgotcodes

+0

「トラブルが始まる」とはどういう意味ですか?あなたは何を観察していますか? – fglez

答えて

0

JMX on your tomcatを有効にし、プロファイラーを使用してモニターします。 Jconsoleやvisualvmのように。ヒープ使用量が時間の経過とともに急速に増加している傾向が示された場合、メモリリークが発生する可能性があります。ロードされたクラスを調べると、この問題の原因を突き止めることができます。

また、ご質問が十分ではありません。まさに「メモリドロップ」という意味ですか?空きメモリが減少することを意味しますか?

0

静的ブロックで何かをしていて、オブジェクトを使用していませんか? サーバーを起動してしばらく稼働させてからブラウザを起動するとどうなりますか?未使用のオブジェクトがあり、GCが実行されている場合、使用可能なメモリが増えているはずです。これは問題を解決できない可能性がありますが、絞り込むことができます。

+0

私はアプリケーション内に静的ブロックを持っていません。オブジェクトがスコープから外れたら、それらはガベージコレクションされ、メモリは解放されるべきです。しかし、それは私が気づいていることではありません。最後の活動の1時間後でさえ、記憶は決して解放されない – user305210

0

標準のリークパターンを探してコードを調べるのではなく、GCログを有効にしてから、それらのログに対してHP Jmeterのようなツールを実行することをお勧めします。あなたがここにJMeterの使用方法について見つけることができます

:GCログを分析するときに探すためにhttp://www.javaperformancetuning.com/tools/hpjmeter/index.shtml#howto

一つの一般的なパターンは、複数の世代に住んでいるオブジェクトです。通常の(漏洩しない)Javaプログラムでは、オブジェクトは短命か長命かのどちらかです。つまり、作成され、素早く破棄されるか、またはアプリケーションの存続期間中存在します。オブジェクトの寿命が短い場合は、安定した少数の世代しか存在しません。オブジェクトの寿命が長い場合は、プログラムの実行に伴ってオブジェクトの経過時間が長くなります。しかし、それは限られた世代にしか属しません。差異のある世代を持ち、世代数が増えている複数のインスタンスを持つオブジェクトを見つけたら、オブジェクトがリークしている可能性があります。 http://www.hjug.org/present/Sporar-MemoryLeaks.pdf

漏れたオブジェクトを特定したら、次のステップでは、漏れたオブジェクトに誰が戻ってきたかを把握するためにヒープを分析する必要があります。そこから問題を特定するのは本当に簡単でなければならない