Java(Web)アプリケーションはJBoss6xで実行されます。遅さが報告されたとき:
- スレッドスタックダンプが取得されました(詳細は以下を参照)
- メモリを調べました-メモリ使用量が非常に高く、最大許容ヒープサイズにほぼ達していることがわかりましたが、メモリ不足はありませんでした。
スレッドスタックダンプは、次の種類のエラーでロギングでブロックされたほとんどのスレッドを表示します。
waiting for monitor entry [0x000000004b6be000]
java.lang.Thread.State: BLOCKED (on object monitor)
at org.jboss.logmanager.handlers.WriterHandler.doPublish(WriterHandler.java:59)
- waiting to lock <0x00002aaac9a2de68> (a java.lang.Object)
at org.jboss.logmanager.ExtHandler.publish(ExtHandler.java:64)
そしてこのように:
java.lang.Thread.State: BLOCKED (on object monitor)
at java.io.PrintStream.println(PrintStream.java:756)
- waiting to lock <0x00002aaac9817a08> (a com.whatever.SomeClass)
at com.something.ThatClass.thatMethod(ThatClass.java:169)
com.whatever.SomeClassはorg.apache.log4j.Logger
を使用しますロギングにはLog4jを使用します。
一部のロギング操作でスレッドがすべてブロックされているようです。この問題は過去にも発生しており、ランダムに表示され、アプリケーションの速度が低下したり停止したりします。
何か案は?