2008-09-15 10 views
0

私は巨大なWebアプリケーションを使ってJava 1.4でTomcat 5.5をしばらく実行してきました。ほとんどの場合、正常に動作しますが、例外が発生することなくハングするだけでなく、Tomcatを再起動する以外の方法で再実行する方法もありません。 Tomcatインスタンスはヒープ上で1ギガバイトのメモリしか使用できませんが、まれに300 MBを超えることはほとんどありません。他の誰かがこの問題にぶつかりましたか?そのための解決策がありますか?Tomcat 5.5(Java 1.4、Windows XP 32ビット版)が突然ハングするのはなぜですか?

説明のために:私は、タスクマネージャーとEclipse経由でどれだけのメモリを使用しているかを判断しました(私はEclipseの外で実行しましたが、少し時間がかかりますが最終的に同じ問題が発生します)。 Eclipseでは、小さな(オプションの)メモリペインを介して割り当てられたメモリと、タスクマネージャを介してjavaw.exeに割り当てられた量を調べます。私はsysdeoを使用しますか? Eclipseのtomcatプラグイン。

答えて

3

すべてのjvmプロセスで、スレッドダンプを強制します。ウィンドウでは、これはCTRL-BREAKで行うことができますが、これはコンソールウィンドウで行うことができます。

* nixでは、ほとんどの場合 "kill -3 jvm-pid"です。

これは、あなたがDB接続プール/スレッドプールで待機しているスレッドを持っているかどうかをチェックするためのもう一つは、あなたが現在JVMを持っているどのように多くの接続がある

など、表示されることが - のいずれかなどNETSTATまたはSysInternalsのユーティリティを使用しますtcpconn/tcpview(Googleのそれ)。

また、verbose:gc JVMフラグを指定して実行してください。 SunのJVMの場合は、「java -verbose:gc」のように実行します。これにより、ガベージコレクションが表示されます。もしそれがたくさん集められているなら(expillously)、おそらくメモリリークがあります。完全なコレクションは、特にそのような大きなヒープでは高価です。

どのように300Mbしか使用されていないと判断していますか?

+0

?コンソールウィンドウがないので、スレッドダンプはどうやって取得できますか? – Herms

+0

おそらく、いくつかのオプション - jstack(1.5または1.6のみ、私は思う)またはAdaptJ http://www.adaptj.com/main/のようなもの。 jstackは使用するのが本当に涼しいです。 – DustinB

0

デッドロックが発生しているようです。

dev環境で再現できる場合は、デバッガを接続してみてください。あなたのスレッドを見て、デッドロックがあるかどうか確認してください。

添付するデバッガを取得できない場合は、Dustinが指摘したように、スレッドダンプを生成できるはずです。

0

Tomcatアプリケーションサーバーのログ記録感度を高めてください。 http://tomcat.apache.org/tomcat-5.5-doc/logging.html

あなたは数日間FINESTまたはそれらのほとんどのためのALLに対する感度を高め、それはあなたが何かをキャッチするのに役立ちますかどうかを確認することができます。私は、複数のスレッドダンプを作成し、このかかわらず、それらを見に同意

関連する問題