山下寛人オフィシャルブログ

オイシックス株式会社 執行役員 システム本部長 山下寛人の公式ブログです。

トラブル対応は原因特定が第一

まさに今改めて重要性を体感しております。先週システムが重くなる障害が発生しました。原因をちゃんと調べず最近リリースしたものを戻してみても効果なし。インフラで変更したものも戻してみようかどうかという案も出ていました。

どのように原因特定したか。

APサーバーの負荷が高い

JVMのOld領域が100%になっている
APサーバーを再起動してもすぐ100%になって止まってしまう

ヒープダンプ取得

Memory Analyzerで調べる

HibernateのSessionFactoryがメモリを大量に消費している

中を見ていくとページを表示するときに実行するSQLがたくさん入っている
変数名からキャッシュであると予想

キャッシュなら消してよいのでは?

Hibernateのソース確認

どうもバグっぽいしキャッシュの役目を果たしておらずただリークしているもよう

そこでこのキャッシュを無理やり消すようにしてみたところold領域が見事に解放されFull GCが減りサーバーの負荷が下がりました。

最近やったインフラ面の変更は全く関係ありませんでしたので戻しても効果はなかったでしょう。

メモリが足りないからといって増やしていたら、無駄なキャッシュが増え、GCのコストが指数関数的に増えてしまい逆に事態は悪化したでしょう。

原因をとことん突き止めることは本当に大事です。