【フロントエンジニアがサーバーエラーに挑む】
ものすごいアクセス数を集めている
メディアサイトで頻繁にサーバーエラーが
発生して見れなくなり、困っているという
ご相談をいただきました。
レンタルサーバーのログ解析ページを見て、
サイトに大きな負荷をかけているページの
ランキングを割り出すところまでご本人が
頑張ってくださいました。
問題はそこからです。
■==================■
ステップ1
■==================■
admin-ajax というプログラムファイルへの
アクセスで一番負荷がかかっていることは
読み取れるのですが、
誰が admin-ajax にアクセスしているのか?
を突き止めるないことには話が進みません。
いろいろ調べた結果、
以下のことが分かりました。
↓ものすごく簡単に言うとこういうこと。
~~~~~~~~~~~~~~~~~~~~
プラグインの中には、ワードプレスの力を
借りて動作するものがあって、
「ワードプレスさん、ちょっと手伝って」
とお願いをするときに、admin-ajax という
プログラムに依頼内容を伝える。
~~~~~~~~~~~~~~~~~~~~
↓プログラマーっぽく言うとこういうこと。
~~~~~~~~~~~~~~~~~~~~
非同期処理を使って動作するプラグインが、
ワードプレスに備わっている非同期通信を
利用するためにリクエストを投げる宛先が
admin-ajax.php である。
~~~~~~~~~~~~~~~~~~~~
■==================■
ステップ2
■==================■
非同期通信っていうのは、簡単に言うと、
ブラウザの画面を再読み込みしなくても
裏で通信ができる方式のことです。
通常、ウェブで別のページに移動するときは
ブラウザの画面が再読み込み(リロード)
されますよね?
あれはこういうことなんです。
ブラウザ「新しいページのデータちょうだい」
↓
サーバー「はい、これだよ。読み込んでね」
↓
ブラウザ「受け取りました。画面を再表示!」
いったんサーバーに要求を丸投げして、
サーバーから応答をキャッチするわけです。
これが一般的な「同期通信」です。
非同期通信の方式だと、
画面を再読み込みしなくてもサーバーから
新しいデータを受け取ったり、
サーバーに何らかの処理をしてもらう
ことができます。
■==================■
ステップ3
■==================■
となると、次の着眼点は、
「画面を再読み込みしなくても
サーバーに何かの処理をしてもらう
必要があるプラグインって何だろう?」
を考えることになります。
ここは想像力と経験がモノを言うのですが、
サーバーエラーが起こっているのがブログ
だということから、
「このブログで使っているプラグインに、
そういう動作を必要とするものがある」
と考えます。
すると、
「アクセスランキングを自動表示する
プラグインが怪しいんじゃないかな?」
という勘がはたらきます。
プラグインの名前を知るには、そのブログを
ブラウザのディベロッパーツールで開き、
HTMLタグに付けられたclass名を見ます。
ブラウザに何かを表示するプラグインは、
見栄えを整えるためにプラグインの作者が
HTMLタグにclass名を付けています。
そして、多くの場合プラグインの略名が
接頭辞についたclass名になっています。
そこから判断すると、
とある有名プラグインが浮かび上がります。
■==================■
ステップ4
■==================■
次に、ステップ3でアタリをつけた
プラグインが本当に admin-ajax.php に
アクセスしているかどうかを確認します。
どうやって確認するのか?
検索です。
Google検索とかじゃないです。
ディベロッパーツールで、そのブログの
表示に使われている javascriptのコードに
注目します。
非同期通信を使うということは、
ブラウザ側で動作するjavascriptを使って
admin-ajax.phpを呼び出すコードが
記述されているはずだからです。
案の定、ありました。
これで、犯人がどのプラグインなのかが
確定しました。
■==================■
ステップ5
■==================■
サーバーエラーの一番の原因である
プラグインが判明したので、
次は対処方針を考えます。
1.プラグインをやめる(削除する)
2.プラグインを変更する(別のを使う)
さあ、どっち!?
迷いましたが、アクセスランキングの
表示がなくなっては困るので1は却下。
でも2も、代替プラグインを探すのが
手間です。
そこで、短絡的に結論を出すのではなく
原理原則にもどって考えてみました。
「ようするに、このプラグインが
admin-ajax にアクセスする頻度を
少なくできればいいんだ・・・」
言い換えると、
「アクセス数をデータベースに更新する
頻度を少なくできればいいんだ・・・」
そういうのって、
プラグインの動作に関することなので、
「プラグインの画面で設定変更できる
ようになっていないかな~~~」
と期待しつつ、プラグインの画面を見ると
ありました。
アクセス数を毎回カウントするのではなく、
一定数のアクセスをサンプリングする
モードがありました。
■==================■
ステップ6
■==================■
ご本人にアドバイスをお伝えしました。
「このプラグインの設定をこのように
変えてみると改善しますよ」
「なぜなら、これがこうでこうだからです」
ここまでのステップについて、
何に着目して、
何を推定し、
何をどのようにして確かめ、
何を結論付けたのか?
を、全てお伝えしました。
長かったけど、あてずっぽうではなく
筋道を立てて論理的に考えて結論を導く。
これがエンジニアのスタンス。
PR
CODEMYのマンツーマンレッスンでは、WordPressや
HTML5やCSS3を基礎からしっかり学びたい方のために、
コース学習の中でカリキュラムをご提案致します。
▼無料相談をお気軽にご利用ください。
http://codemy-lesson.office-ing.net/contact
━━━━━━━━━━━━━━━━━━
講師が執筆した本が発売されました
━━━━━━━━━━━━━━━━━━
『WordPressのツボとコツがゼッタイにわかる本』
▼Amazonで概要を見る
http://amzn.to/2nd7Ia5
『ホームページ作成のツボとコツがゼッタイにわかる本』
▼Amazonで概要を見る
http://amzn.to/2bXJkbs
━━━━━━━━━━━━━━━━━━
CODEMYのオンラインレッスン
━━━━━━━━━━━━━━━━━━
【1】自宅でマンツーマンレッスン
http://codemy-lesson.office-ing.net/
知りたいことだけ学べる個人レッスンです。
【2】動画と個別添削のプログラミング講座
http://bit.ly/2h7ZeRJ
HTML/CSS/JavaScriptの基本が身に付くレッスンです。
↓無料体験はこちら
http://bit.ly/2hw7mIy