Webサイト専門プログラマの言いたい放題

元システムエンジニアがサイト制作とプログラミングについて好き放題しゃべります。

【フロントエンジニアがサーバーエラーに挑む】

f:id:wp-lesson:20170421085911j:plain

ものすごいアクセス数を集めている
メディアサイトで頻繁にサーバーエラーが
発生して見れなくなり、困っているという
ご相談をいただきました。
 
レンタルサーバーのログ解析ページを見て、
サイトに大きな負荷をかけているページの
ランキングを割り出すところまでご本人が
頑張ってくださいました。
 
 
問題はそこからです。
 
 
■==================■
       ステップ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