サーバーダウンの原因調査

WordPressを稼働させているサーバが良く落ちる。

データのバックアップにbackWPupのプラグインを使っているのだが、これが動く前後でMySQLやApacheが死ぬ。

原因調査と対応について、今後のためにもここにメモ代わりに書き残しておく。

  1. messageログを確認
    egrep -i ‘fatal|error|memory|resource’ /var/log/messages
    Oom Killが発生していると一発で判明する。
    うちでは突然OomKillが発生して手あたり次第サービスが終了されてしまい、WordPressの機能不全に陥っておりました。
  2. メモリを食ってる問題のプロセスを特定...したいけど、どうしたらいいんだろう...。いずれかのhttpdがメモリを食いつぶし始めるんじゃないかと思うのだが、サーバーに問題が発生した時点で、慌ててApache、MySQLを再起動させたので、現状この先どう調べればよいのかわからない。
    各サービスを再起動させる前に、psかtopでも発行してればもう少しヒントを得られたのかな?
    ただ、動いてるプロセスからして、ApacheかMySQLのどちらかしか考えにくいし、おそらくはApacheなんだろうなと思うのだが...、何に対するリクエストで、そんなメモリをバカ食いするんだろうか。
    OomKill発生前のアクセスログから地道に調査するしかないのかなぁ...めんどくせぇ。

以後、調査が進めば随時追記していきます。

 

ログ解析用Linuxコマンド

Apacheのアクセスログを解析するにあたって、便利なコマンドとその例文。
使うときは急ぐ場合が多いのに、たまにしか使わないからすぐ忘れる…。

Windowsで使う場合はCygwin必須。

1.ログの“何か”を基準に並べ替えて出力する。

【コマンド例】

【出力結果】

1900401 10.21.11.21
64325 10.21.62.40
11434 101.155.17.53
518 101.155.17.78

【補足】
awk'{print $1}’の部分で、並べ替え対象のフィールドを指定している。
$1の数字はログに含まれる行の何番目のフィールド(半角スペース区切りで)かを指定している。
Apacheのログでよく対象にすると思われるフィールドは以下の通り。
・1 = アクセス元のIP
・4 = アクセス日時
・8 = アクセス対象
・12 = リファラ
ちなみに$0は行全体を指す。

2.Grepいろいろ

・「検索文字列」を含む行を抽出

・「検索文字列」を含まない行を抽出

・-c オプションで結果の件数を出力

・パイプでつなげて複数条件を指定
(検索文字列を含んだ行のうち、hoge.htmlを含まない結果を出力)

パイプでlessに渡すと結果を表示。
リダイレクタでファイルを指定すればファイルに書き出す。
なお、Cygwinなどでファイルパスを指定する場合、パスのセパレータはwindowsでも\ではなく/でOK。