■概要
Tomcat上で動作しているWebアプリが急にスローダウンする現象が発生し、原因追及に困っております。
スレッドダンプの状態などからアプリケーションのロジックそのものより、Java自体で問題が発生していないかを疑っています。
なにか原因や対策として思いつくものがありましたら教えていただけないでしょうか。
■事象
・LoadAverageが上昇(通常時:0.5、スローダウン時:3~5)
・CPUはuserのみが占有(IOやswapは問題なし)
→ほぼTomcatが利用している
・マイナーGCも秒単位でかかるようになる(通常時:0.1ミリ秒以下、異常時:3秒前後)
・しばらくするとTomcatの再起動なしでも復旧する
・複数台のサーバでほぼ同時に発生(アクセスが集中する時間に発生するケースが多い)
・スレッドダンプを取得するとSystem.getProperty()内で呼ばれているHashtable.get()でロック待ちが多数発生
→デッドロックではない模様
■環境情報
OS:Redhat 7.3 64bit
Java:1.7.0_80
Java起動オプション:
-Xms3072m
-Xmx3072m
-Xss800k
-XX:MaxPermSize=192m
-XX:+UseParallelGC
-XX:+UseParallelOldGC
-XX:SurvivorRatio=6
-XX:TargetSurvivorRatio=90
-XX:MaxTenuringThreshold=32
-XX:NewRatio=2
-XX:-UseCodeCacheFlushing
-XX:ReservedCodeCacheSize=256m
-XX:+PrintGCDetails
-XX:+PrintGCDateStamps
-XX:+PrintHeapAtGC
-XX:+PrintClassHistogram
-XX:+HeapDumpOnOutOfMemoryError
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。