インフラエンジニアbacchiのわかったことまとめ

bacchi.me

Linux

サーバー障害発生時の切り分け

更新日:

スムーズに障害から復旧するために、
(1) 障害別の要因予想
(2) 障害別の対策
(3) 障害切り分け時に考慮する点
をまとめます。

障害別の要因予想

Pingで応答がない

【サーバ自体が動いていない】
1. HDD不調→自動で再起動→壊れているから起動不可 or fsckするかの入力待ち
2. 電源がお亡くなりになった
3. その他ハードウェアの不具合
4. 負荷に耐えられずフリーズしている(例:メモリ不足)

【ネットワークが死んでいる】
1. ネットワークの上流でハードウェアの不具合が出ている

Pingは応答するが、SSHで接続できない

【SSHするほど余力がない】
1. メモリ不足やディスクIOの低下

SSHで接続できる

【データの書き込みができなくなった】
1. ディスクがいっぱい
2. ログファイルや一時ファイルがファイルシステム(またはミドルウェア)のデータサイズ制限を越えた

【サーバ自体ではなく、各ミドルウェアの問題】
1. ミドルウェアがなぜか停止している
2. ミドルウェアの設定上限を超えた処理要求が来ている

障害別の対策

サーバ自体が動いていない

【とりあえずリブートしてみる】
1. 電源OFF/ONを検討

【リブートしても状態がよくならない】
1. fsck(ディスクチェック)の入力待ち状態のときは、とりあえずfsckしてみる
2. 起動しない場合は電源やその他ハードウェアが死んでいる

ネットワークが死んでいる

【同じネットワーク内のサーバで同様の症状が発生していないか】
1. tracertで途中経路の疎通を確認
2. 他のサーバへのPing疎通確認

SSHするほど余力がない

【とりあえずリブートさせる】
1. SSHで何度か接続を試みる
2. 駄目なら電源OFF/ON依頼を検討
3. 再起動後にログを確認してみる→原因特定へ

データの書き込みができなくなった

【HDDの空き容量は十分か?】
1. dfコマンドで空き容量を確認する
2.ディスク使用率が100%となっていれば不要ファイルを削除

【ログファイルなどが書き込み不可になっていないか】
1. サービスが停止しているミドルウェアのログファイルなどで、2GBに達しているファイルがないか確認

各ミドルウェアで問題が発生した

【停止していないか確認してみる】
1. Listenしているかどうか見てみる(netstat -npl | grep [サービス名])
2. service [サービス名] restart とか

【エラーの原因を探ってみる】
1. ログファイルでエラー原因を特定する

メモリやリソースが不足したときの挙動

【メモリが不足するタイミング 】
* CGIやPHPなどによりメモリリークしている
* 突然大量の接続が確立された などなど

【OOM Killerによるプロセス強制停止】
メモリの空きがなくなった場合に、適当にプロセスをブッKillして空きメモリを確保しようとします。
下記のようなエラーがsyslogに出てたらOOM Killerさんが働いた証拠。

メモリの空き容量が足りなくなったときに、適当なアプリケーションを強制停止させて空きメモリを確保するLinux Kernelの機能です。
ヒューリスティック*に基づいて停止するアプリケーションを決定するため、
時に無実の(重要な)アプリケーションを停止させることもあります。
※ヒューリスティック:必ずしもそれが正しいわけではないが、ある程度正解に近い解を得る手法

ということで、何らかの外的要因でメモリ使用量が増えると、
勝手にプロセスをKillされてしまう可能性がある。

それによりサービスが停止して障害となる、という一連の流れが出来上がることもある模様。

改善策はメモリ(物理メモリなり、Swapなり)を増やすこと、各サービスのメモリ使用量を減らすこと。

また、OOM Killerそのものを無効化したり、重要なプロセスについてはOOM Killerの対象外とするなど。

メモリ不足によるフリーズ

これは再起動するほかなし。

リソース(接続数)不足による障害

ApacheやSQLのMaxConnections?に達したとき、サーバ監視プログラムが新規接続を確立できずエラーを吐く
MuminやらZabbixやらを使っている場合、確認してみると、ものすごい勢いで接続が...

落ち着くのを待つしかないかも。。。

原因の特定

OOM Killerが原因なら、/var/log/messagesに上述のメッセージが出ているはず
再起動後、freeコマンドやpsコマンドでメモリ使用量を見てみるといいかも

障害切り分け時に考慮する点

設定については考慮しない
これまで正常に動作していたなら、突然設定がおかしくなることはありえない
例:ファイルのアクセス権、ネットワーク設定など

むやみやたらと再起動すると痛い目にあうかも
立ち上がるべきサービスが自動で立ち上がらないとか

Sponsor Link

スポンサーリンク

Sponsor Link

スポンサーリンク

-Linux

Copyright© bacchi.me , 2018 AllRights Reserved.