LoadAverage上昇、SendingReply多数、Sleep多数 障害発生から解消まで

linux

とあるサーバでサイトの表示が不安定になる事象が発生。このサーバ問題が多くて非常に辛い。

サーバ構成 など

  • 通常のLAMP構成(Linux,Apache,MySQL,PHP)
  • WEB/DBは同一筐体の冗長構成、WEBはActive/Active、DBはActive/Standby
  • MySQL内に画像を保管してて、PHPから呼び出している
  • Apacheのmod_cacheは色々な理由から停止中

事象発生時の各状況

LoadAverage(4日間のグラフ)
・障害発生時は1000を超え出す

CPU(4日間のグラフ)
・全く大したことない

memory(4日間のグラフ)
・MySQLで確保してる分があったりするが、溢れているわけではない
・3日目から4日目で使用率が下がっているのは、根本対応+MySQLの再起動を実施したため

通信トラフィック(4日間のグラフ)
・LoadBalancerで振り分け量変えたりしたので、バラツキ有り
・トラフィックの単位はByte
・障害発生時にトラフィック急増となっているわけではない

Apache server-status
・障害発生時のタイミング
・「_」(待機中)や、「.」(未起動)が無く、W(SendingReply:応答中)で埋め尽くされてる
・MySQLが起動していないStandby側のWEBサーバでも発生

MySQL
・障害発生時のタイミング
・大量のSleepで埋め尽くされる

mysql> show processlist;
+------------+--------+----------------+-------+---------+------+--------+-------------------+
| Id         | User   | Host           | db    | Command | Time | State  | Info              |
+------------+--------+----------------+-------+---------+------+--------+-------------------+
| 1783245676 | root   | localhost      | NULL  | Query   |    0 | init   | show processlist  |
| 1786529853 | hoge   | 10.0.0.1:26603 | fuga  | Sleep   |  385 |        | NULL              |
| 1786529933 | hoge   | 10.0.0.1:26811 | fuga  | Sleep   |  385 |        | NULL              |
| 1786530176 | hoge   | 10.0.0.1:26895 | fuga  | Sleep   |  383 |        | NULL              |
| 1786530435 | hoge   | 10.0.0.1:26949 | fuga  | Sleep   |  383 |        | NULL              |
    :
1000 rows in set (0.00 sec)

各種ログ
・割愛。コレ!と言えるようなものは無し

障害発生までの流れ

確定では無いが、状況証拠から以下のような状態になっていると推測

  • 何かしらのアクセスがセッションを変な状態で終了させている
  • 結果、MySQLに大量のSleep(接続されたまま何もしていない状態)が残る
  • ApacheのプロセスがMySQLと接続したままになっているのでSendingReply状態となる
  • MaxClientsに達し、LoadAverageが高くなる
  • 何もしていない待ち状態の滞留なのでサーバ自体の負荷は高く無いが、障害となる

原因の特定

とりあえず先に結論、サーバが接続しているスイッチで一部パケットがDROPされていた

下記はサーバが接続しているスイッチのアップリンクポート

switch#show interfaces gigabitEthernet 1/0/23 counters errors 

Port        Align-Err     FCS-Err    Xmit-Err     Rcv-Err  UnderSize  OutDiscards 
Gi1/0/23            0           0           0           0          0     15200842 

社内のネットワークマスターに聞いてみた

ワイ
ワイ

1Gbpsのポートでトラフィックが溢れなくてもdiscardが出てDROPされるものですか?

マスター
マスター

discardが起こる理由はいくつかある

そのうちの1つが流入したパケット量がスイッチの転送用ASICの容量を超えてしまったのでスイッチが捨てた、というケース

トラフィックが溢れなくても起こりえる

古いスイッチや転送用ASICのメモリ容量(=パケットバッファ)が小さいタイプで起こりうる

とりあえずだいぶ古いスイッチなので、可能性はだいぶ高そう。
事象が発生したタイミングでエラーカウントが上がったことを確認できたのでほぼ濃厚。

ということで、根本対応は高スペックスイッチへの振替。

結果、直ったー!!良かった良かった。

最後に

最初はBOTが濃厚じゃ無いかと思っていた。BOTが大量にアクセス(accessログ上は見つけられなかったが)して、セッションを変な状態で終了し、ApacheのプロセスをSendingReply状態、MySQLに大量のSleep放置。ApacheはMaxClientsに達して応答遅延の状態になっている。。。と。結局こういうケースは少ないのかな。googleとかのBOTがそんなことしてきたら困るんだが正規BOT君は大丈夫なのかな。

トラフィック溢れ、完全ダウン、現地作業によるloopなどを除いて、ネットワーク周りはあまり疑うことなかったので良い経験になった。

コメント