障害調査のコツ(ログの調査方法など)

新卒とかに何度も説明しているので、再共有時用のメモです

とにかくまずはアプリケーションが出力しているログを見ることです。

大抵の場合は、答えか大きなヒントがそこに書いてあります。

特にフレームワークの出力しているエラーメッセージとスタックトレースをよく見ましょう。

自分たちが書いたコードでも、異常データが入力された場合やデータ不整合を検知した箇所ではわかりやすいメッセージと共にエラーログを出力しておきましょう。半年か1年後の自分が救われます。(もっと早いかも?)

ログにヒントが無いときはどうしましょうか。

  • 現象が無応答状態ならThread dumpの各Threadの状態を観察する
  • OutOfMemoryによる突然死の場合はheap dump(発生時に出力するように設定するのを忘れないこと)を、Eclipse Memory Analyzerなどで解析する
  • Stop The Worldっぽい場合は、gc.logでFull GCが起きてないか確認する

といった感じのことをすれば大抵の場合は原因を突き止められると思います。

上記でも特定できない突然死の場合はOSのOOM Killerを疑いましょう。OOM Killerでないにしても、/var/log/messagesなどの/var/log配下のログを見ると、OSがプロセスを落としている痕跡が残っているかもしれません。

他にも症状によって疑うところはたくさんあると思いますので、上記は一例だと思ってください。

ちなみにネットワーク周りの調査だとパケットキャプチャするっていう手もあります。

例えばkeep aliveの設定が効いているかとかハーフコネクションが起きてないかとかですね。

意図した電文や正常な電文がやり取りされているか確認する手段はあるので、知っておくといつか役に立つかもしれません

私もパケットキャプチャの勉強をちゃんとやろうと思ってすべく、パケットキャプチャの教科書という書籍を買いました。

パラパラめくった感じでは、なかなか良さそうです。

まだ読んでませんが^w^