Webサーバ・ダウン

Webサーバ・ダウンと言ってもTOOR.JPではなく。

昨年末の12/29、納会でちょっと酒も入り気分よく帰宅している道中、上司より着信。

「サイトにアクセスできないらしい。」

はい、一気に酒が抜けました^^;


オフィスへ戻るより自宅へ帰ったほうが速い、と判断し急いで帰宅。
調べてみると確かにWebサーバが2台ともハングアップ状態で、pingは戻ってくるもののHTTPやSSHその他諸々のサービスは完全に無反応。ポートは開いておりパケットは受け付けるものの応答なし、ってのが厄介。どうせならポートまで完全に閉じてくれればタイムアウトまで待たなくてもいいのにブツブツとか言いつつ、あれやこれやの方法を裏側から試してみる・・・・・・も、完全にダウンしているらしい。

 

仕方ないので社内の別チームに電源再投入を依頼。これでダメなら(酒が抜けるのを待って)データセンターへ行くしかないなーと思いつつ、祈るような気持ちで待つこと数分。


無事に起動ヽ(´ー`)ノ


その後様子を見ていると、またもや2号機のロードアベレージが急上昇。なんと15を越えています!トラフィックが片肺に流入したせいか、またほかの原因があるのか、続いて1号機の負荷も急上昇!


きゃーーー、やばいやばいやばい


サービス全体のダウンを防ぐことが最優先、と判断し、急遽2号機のHTTP接続を絞ることにしました。タイムアウトも短くし、MAXのコネクション数を絞ります。

そして問答無用でプロセス再起動。


徐々に、徐々にではありますがロードアベレージが低下し始めてくれました。
この日はこのまま様子を見ることにしました。


年が明けて今日、1月5日。仕事始めと同時に、年末のサーバダウンについて調査を開始しました。


まずは定番のログ分析。
・・・・・・・・・・・・・・なーーーんも残ってねーし。


いや正確には、ログは残っていてもなぜハングアップしたか、という原因に関するログが一切無いのです。ハングアップするほんの数分前までは正常に動作しているらしい、ということはわかりましたが、実際に何が引き金となって過負荷に陥ったのかさっぱりわかりません。


かなり急激な負荷の上昇により、一気にプロセスが回らなくなってしまったようです。

っと、ひとつ気になるログを発見しました。


最初にハングアップした2号機のdmesgによると、

Out of Memory: Killed process 870 (httpd).<br />Out of Memory: Killed process 888 (httpd).<br />Out of Memory: Killed process 884 (httpd).<br />TCP: Treason uncloaked! Peer ***.***.***.***:39660/80 shrinks window 3584164780:358<br />4164970. Repaired.<br />Out of Memory: Killed process 895 (httpd).<br />TCP: Treason uncloaked! Peer ***.***.***.***:45465/80 shrinks window 3747938790:3<br />747941709. Repaired.<br />TCP: Treason uncloaked! Peer ***.***.***.***:45465/80 shrinks window 3747938790:3<br />747941709. Repaired.<br />Out of Memory: Killed process 2367 (httpd).<br />TCP: Treason uncloaked! Peer ***.***.***.***:21267/80 shrinks window 1078388069:10<br />78388651. Repaired.<br />TCP: Treason uncloaked! Peer ***.***.***.***:56875/80 shrinks window 1697632999:<br />1697635918. Repaired.


 
  1. httpdがOut Of Memoryで落ちている
  2. Treason uncloaked というエラーが記録されている


この「Treason 以下略」というエラーですが、Google先生にお伺いしたところ
OSS Message Pedia

TCPの通信処理を行っているときに以下の全ての条件を満たした場合に本メッセージは出力される。


  • 再送信したパケットに対してのackが無い
  • TCP windowサイズが0の場合である
  • ソケットが閉じていない
  • ソケットの状態がコネクション確立後である

原因としては以下の状況が想定される


  • DoS(Deny of Service)攻撃を受けている
  • 通信相手がtarpit(応答遅延)を行っている
  • NIC(Network InterfaceCard)のドライバの実装が良くない。
  • TCPスタックの実装に問題がある。(OSの問題)
  • 対処

    インターネット上のホストからDoS攻撃を受けている可能性がある。 通信相手のIPアドレス等を調査し、信頼できないホストであると判断出来た場合は、Firewall等により通信を遮断する必要がある。

    また、通信相手が信頼できるホストであった場合はtarpitの影響か、もしくは相手ホストとの間の通信障害が発生している可能性があるため、両ホスト間のスイッチが故障していないかもしくは、NICが正常に動作しているか等を確認する必要がある。



     

    DDoS攻撃っすか━━(゚Д゚;)━━━っ!!!!!


    そう考えると納得できるフシはありますね、確かに。
    しかし、、、dmesg ってタイムスタンプ出てないんだよな・・・・・はっきりとこれが原因、とは言い切れないなぁ。。可能性が高い、とは言えるけども。


    ってことで引き続き調査を続行中ナリ。

    1. コメント 0

    1. トラックバック 0

    return top