Nagiosがアラートを吐きまくる
ここ最近一日に数回Nagiosがアラートを出していました。
一度アラートを出すと5分後ぐらいにリカバリーとなるのですが
その後すぐにまたアラートを出す
→リカバリー
→アラート
→リカバリー
→・・・
となってしまうのでやむなくトムキャットを再起動。
再起動するとこれは止まります。
が
まいど発生するたびに手動で対応するなんてことをしていたら
私が3人いても寝不足で死にます。
なので調査をすることになりました。
以下、とりあえず解決したのでまとめました。
Nagiosがアラート出していた内容
Notification Type: PROBLEM
Service: HTTP-CHECK-INSPECT-tomcat
Host: webサーバでござる
Address: アドレスでござる
State: CRITICALDate/Time: 日時
Additional Info:
CRITICAL - Socket timeout after 10 seconds
タイムアウトしてました。
■ここ最近になってアクセスが上がりまくったのか。
アクセスはいつもと変わらず。
というよりも朝の2時にも発生しているのでアクセス数が上がって処理が追いつかんとかではなさそう。
■システムで重い処理をしているか。
2時にも発生している時点でこれもない。
日時バッチが走るのは3時に設定しているのでバッチも関係ない。
そもそもバッチは別サーバ。
■管理側で重い処理をしているか。
これも2時に発生している時点で直接の原因ではない。
しかし管理とフロントと同サーバでやっている時点でおかしい。
管理側ではcsvアップロードなどの重い処理があるのでわけないとダメポ・・
■catalina.out になにか出力されていないか。
Unloading class sun.reflect.GeneratedConstructorAccessor
Unloading class sun.reflect.GeneratedMethodAccessor
めっさいっぱいUnloadingしてました。
■gc.log をみてみる
[Full GC 4599454K -> 4595677K(4599488K),14.0726330 secs]
ていうのが大量に出力されてる!!
40個ぐらいで止まっているのはトムキャット再起動したからですね。
これが原因ですね。
■結論
Full GC を連発しているのが原因。
Full GC するとすべての処理が停止する。
一回のFull GC に10秒以上かかっていて、その間すべての処理が停止している。
ここにさらにcsvアップロードを実行したため大量にメモリを消費した。
(PermSize=256mと設定していたが枯渇しとどめになった)
■対応内容
/etc/init.d/tomcat の MaxPermSizeを256→512にした。