1

Tomcat 7.0.23 で Web アプリ (Spring/Hibernate) を実行しています。症状としては、数日 (通常は 4 ~ 5 日) 実行した後、応答が非常に遅くなります。通常 2 秒で読み込まれるページは、30 ~ 50 秒かかります。再起動すると、応答が正常に戻ります (2 秒)。前後にスレッドダンプを取得しました。問題のスレッド (応答に時間がかかっている) がロックされていることがわかります。これがスニペットです。

at org.apache.coyote.ajp.AjpProcessor.process(AjpProcessor.java:200)
    at
org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:539)
    at
org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:298)
    - locked <0x0000000799446298> (a
org.apache.tomcat.util.net.SocketWrapper)
    at
java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1110)
    at
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:603)
    at java.lang.Thread.run(Thread.java:722)

コードを調べると、同期されたメソッドがあり、それがロックを説明しています。しかし、ロックが物事を遅くしているのなら、なぜそれが新たなスタートから現れなかったのか、そしてなぜ数日間実行した後にだけなのか疑問に思っています. どこを見ようか迷う。手がかりはありますか?前もって感謝します。

4

1 に答える 1

0

jmeter や soapui などを使用して基本的なテストを実行することをお勧めします。

負荷をゆっくりと上げて、何が起こるか見てみましょう: 屋根を通過する平均時間ですか、それとも少し遅くなっただけですか? エラーが発生していますか、それともまだ稼働していますか?

その間、visualvm を開き、VM を確認します。未使用のインスタンスを解放しようとして GC がビジー状態になったり、ロックが発生したりする可能性があります。スレッド ダンプとヒープ ダンプ機能を使用して、もう少し先に進みます。

非常に古いアプリでこのようなテストを実行したところ、log4j 1.x にはマルチスレッドに大きな問題があることがわかりました: log4j 2 にアップグレード -> 問題が解決しました!

お役に立てれば。

于 2013-09-19T10:10:17.247 に答える