Webアプリケーションの障害対策あるある。いわゆるLAMP環境を想定しています。
- 緊急時は、メールではなく、電話で人を捕まえる
- ありがちなのがメールで必要な人を捕まえようとして、「待ち」の状態に入るという人。悠長なこと言ってられないので、電話で捕まえる
- インフラ周りは、アプリの担当でなくても、障害ポイントが分かるので、己のサービスを復旧させるためには、上司だろうとたたき起こして助けを求める。
- マシン再起動もためらわない
- がっつり止まっている時には、ためらう必要はない。再起動することで原因を探るための証拠が消えるリスクもあるが、サービス停止のままの方がいいってことはあまりない
- リモートから再起動できないときには、データセンターに電話をして、物理的に再起動してもらいましょう
- たまには再起動の練習をしておきましょう。再起動時に自動起動して欲しいサービスが登録されてないというミスは早めに見つけておきましょう
- すぐにできる調査あれこれ
- 別のルートでアクセスしてみる
- 携帯からのアクセスだと、いろんなところを経由していうので、別経路としてPCなどのまるで別のネットワークからアクセスしてみる。
- エラーログをみる
- アプリのログや、Apacheのエラーログなど、すぐにアクセスできるように。以外にそのまんまの理由が書かれていることが多い。
- いつでも見れるように。ログ参照の権限をあまりケチらない。
- ロードアベレージみてみる
- WebやDBのロードアベレージを見る
- cactiなどのツールは過去にさかのぼってみるには便利だけど、障害時は「今」をみなくちゃいけない
- ロードアベレージが高い時には、CPUの使用率とIO待ちを見る。ありがちなのは、CPUをあまり使って無くて、DBのクエリを待つApacheプロセスがずらりずらりと並んでいるという状態。そのときにはすぐにDBを疑う
- PHPでAPCを導入してると、PHPの処理速度がボトルネックになることはほとんど無いけどねー
- DBでshow procecsslistしてみる
- ダメなSQLが滞留しているかも知れない。だめなSQLがロックをかけているかも知れない。phpmyadminだと「プロセス」タブで同じものが見れる。スローログを見てもいいが、閾値以上のSQLが全部でちゃうので、緊急時はどれがダメな子か見分けにくい。
- IOが少ないはずのに、IO待ちが多いときにはdstatで見てみる
- 大した処理が流れてないのに、IO待ちが多いというときには、何か悪さしてないかを疑う。dstatコマンドで、IOがリアルにモニタリングできる
- 例えばデバッグ用のログを吐きだし続けていて、そこがIOのボトルネックになっていないか疑う
- Apacheのコネクションを多くしすぎて、メモリが不足し、SWAPすることでディスク書き込みが発生していないか疑う
そんな感じ。ざっとまとめると。
- ボトルネックは一つ。それを探す
- 遅いというのは「待ち」が発生している状態。ロードアベレージは「待ち」を表す指標でそれそのものは原因を表さない
- コンピュータのリソースで、ボトルネックになるのは、CPUとIO。どちらかを特定する。
0 件のコメント:
コメントを投稿