2018.11.24 解決しました!!
Facebookやmixiに次ぐ大手SNSサイト『ともよちゃんねる』に激震が走った。ここ数日でサイトが断続的にダウンしていたのだ。
この事態に管理者は困惑。
【お知らせ】本日11月19日(月)、システム不具合により『ともよちゃんねる2.2』に接続できない状況が発生しておりました。現在は復旧済みで、原因は調査中です。ご迷惑をおかけしました…
— ごだいっぽい人 (@godai_mako) November 19, 2018
とりあえずディスクI/Oの負荷ということは特定したけど、何がトリガーになっているのかが不明。。。発生時刻もバラバラだし、メモリ足らんのかなあ。
— ごだいっぽい人 (@godai_mako) November 21, 2018
そして現実逃避。あ、ピカブイ買いました。
もう魔法のせいってことでいいかな…今日はイーブイと一緒にカスミをぶっ倒さなければならんのや…
— ごだいっぽい人 (@godai_mako) November 21, 2018
ということで(珍しく)真面目に障害調査をしてみたので、備忘を兼ねて対応内容を記してみます。
前提条件
サーバを動かしている環境は以下の通り。結構低スペで動かしております。
基盤:さくらのVPS
メモリ:1GB
ストレージ:SSD30GB
CPU:2コア
OS:CentOS Linux release 7.5.1804
DB:mysql Ver 15.1 Distrib 10.2.15-MariaDB
WEB:Apache/2.4.6
ソフト:Wordpress
今回確認した事象
・不定期にDISK I/O負荷が急増する
・事象発生時にはサイトにアクセスできなくなる
・コンソールはかろうじて動くがかなり重い
・rebootすれば解消する
障害調査するんだぁ
とりあえずtopコマンドでサーバの負荷を見てみる。
通常時
暴走時
おうふ。。。メモリが自爆寸前のセルのごとくパンパンになっておりました。もうこの時点でコンソール操作がかなり重い。肝心の「何のプロセスが負荷をかけているのか」ですが、ご覧の通りWEBサーバのapacheさんがかなり頑張っているみたいです。
ということでhttpd関連のログをチェックしました。案の上エラーログを吐いているので中身を確認します。
コマンド:
cat /var/log/httpd/error_log
結果:
oh...
ログがずらーーーっと並んでおりますが、接続を元をみると殆ど同一のIPアドレス[83.142.X.X][220.243.X.X]で、国を調べてみるとイギリスや中国のものっぽい。
まさかDOS攻撃かと思いつつエラーログの各行末尾を確認すると、どうやら特定のインスタンスへのアクセスに対し集中放火されているみたいです。
……wp/wp-includes/wp-db.php on line 1924
ググったらたまたま同じ事象に直面している人がいたので、こちらのエントリを参考にしてみる。
https://wordpress.org/support/topic/error-messages-when-accessing-site/
回答者曰く「テーマやらプラグインやらが競合している可能性があるから一度全部停止して切り分けてみよ」的なものでした。私が直面している問題は不定期で発生しており確認が難しかったため、とりあえず余計なテーマやプラグインを片っ端から停止➡︎削除しました。
メモリが少ないからスケールアップも考えてみたけど、原因が分からないしもっとアクセスが集中していたときもこのスペックで捌けていたので、とりあえず今はこれで様子見…
うーん、接続元が海外というのが気になるなあ。テーマやプラグインのアップデート先が海外で、自動でアップデートしようとして失敗というシナリオだったら納得するけど…
おまけの対応
ついでに以下対応も行いました。
①データベースの正常性確認
目的:
データベースの正常性を確認する
コマンド:
mysqlcheck -c -u "ユーザ名" -p --all-databases
結果:
全てOK
②データベースの最適化処理
目的:
特定のデータベースのテーブル内にオーバーヘッドが出てないか確認し、出ていれば最適化を行う。
コマンド:
mysql> use "Wordpressのデータベース名";
mysql> show table status \G;
結果:
テーブルの22行目の[wp_posts]にオーバーヘッドが結構残っていた。名前的に投稿データを格納するテーブルだと思われる。最適化する。
コマンド:
mysqlcheck -o -u "ユーザ名" -p --all-databases
結果:
半分くらいになった。
③ネットワーク監視ツールの導入
無料で利用できるネットワークの死活監視ツールを導入してみた。アカウントを取得して監視対象のURL等の情報を入力するだけで、対象サイトに対しhttpやpingのポーリングを行ってくれる優れもの。
指定した時間以内に対象サイトから応答がなかった場合は、以上の様にメールで通知してくれる。もっと早く導入しておけば良かった…
おしまい