こんにちは。KYOです。
今回は、「503エラー」に関するお話です。
先日、運営しているWebサイトの一つにアクセスしたところ、「Service Temporarily Unavailable」というメッセージが表示され、コンテンツが一切見られなくなってしまいました。
現在では既に503エラーは解消されていますが、同じ症状に悩んでいる方のために、本記事ではエラーを解決した方法について解説いたします。
503エラーが起きた原因は何だった?
503エラーはService Temporarily Unavailableというメッセージが表示されますが、これは「一時的にサービスが利用不可になっています」という意味です。
このエラーが起きた原因はアクセスが急激に増えたことで、サーバーに高負荷が掛かっていることでした。
突発的または慢性的かを問わず、アクセスの過集中が発生するとサーバーに高負荷が掛かってしまい、最終的にはサーバーがダウンしてしまいます。
つまり、503エラー(Service Temporarily Unavailable)はサーバーがダウンする一歩手前と言うことが出来ます。
この事態を回避するために、サーバー側では各Webサイト毎にユーザーからのアクセス数に”上限”を設定しているのです。
アクセス数の上限に達した場合、そのWebサイトに503エラーが発生し、これ以上のアクセスが発生しないように対策をしているというわけです。
事実、私が契約しているサーバー(wpX)から以下のメールが送られてきました。
お客様のサーバーアカウントにおいて、MySQLデータベースに対する
著しい負荷上昇を確認いたしましたのでお知らせいたします。
事後のご案内となり大変申し訳ございませんが、
同収容サーバー全体への悪影響が懸念されたため、
お客様のサーバーアカウントに対し下記の制限を実施しております。▼サポートにて実施した制限内容
—————————————————————–
・MySQLデータベースに対する同時接続制限を強化
—————————————————————–
正直なところ、このメールを読んで分かったことは「アクセスの過集中を理由にアクセスを制限した」という点だけでした。
「MySQLデータベース」という専門用語を調べてみても、これが何を意味しているのかは理解することが出来ず、ましてや、今後何をすればいいのかさえも分かりませんでした。
ただ、サーバーから送られて来たメールによれば、サーバーへの高負荷を軽減する措置を講じないと、アクセスの制限は解除されないとのこと。
データベース負荷対策を行っていただきましたら、
お客様がなさった負荷対策の詳細を必ずサポートまでご連絡ください。ご実施いただいた負荷対策を元に改めてデータベース負荷を調査し、
負荷状況に問題がないことを確認しましたら、
段階的な制限の緩和や、制限の解除を検討いたします。
もし高負荷の原因を特定できず、これが解消できなければ、当該Webサイトはユーザーのアクセスが激減した状態が続くことになります。
サーバー側がアクセス制限を実施したことで、503エラーのページは表示されなくなりましたが、アクセス数は1/10程度にまで減少していました。
確かに、503エラーの表示こそ消えてはいるものの、この状況を改善しない限り、503エラーを根本的に解決したとは言えません。
「503エラーが表示されなくなった」ということと「原因が特定され、これを解消した」ということは全くの別問題だからです。
私としてもこの状態は1日でも早く解決しなければならないため、施行錯誤を繰り返すことになりました。
503エラーを解消した方法
結論から言うと、503エラーが発生した原因は”あるプラグイン”が原因でした。
この事実に気づいたきっかけは、wpXから送られて来たメールに記載されていた以下の一文です。
負荷検知時点で複数実行されていたSQL
——————————————————-
SELECT `id` FROM `wp_quads_stats` WHERE `ad_id` = 4 AND `ad_device_name` = 0 AND `ad_thetime` = 1650
——————————————————-
赤字で強調した部分がプラグインの名前で、当時の私は「WP QUADS」というプラグインでAdSenseの広告を記事に表示させていました。
このプラグインを導入すると、「quads id=1」「quads id=2」というようにショートコードを記事に記載することで、任意の場所に広告を表示することが出来るのです。
通常であれば、このプラグインで広告を設置しただけでサーバーに高負荷が掛かるということはありません。
しかし、当該Webサイトは悪意あるユーザーから広告を意図的にクリックされるという嫌がらせ行為を受けていたのです。
これにより、当該Webサイトの広告は何度もクリックされており、いわゆる”AdSense狩り”という状態にありました。
現在のGoogleでは不審なクリックは無効と判断しているため、たとえ今回のように意図的に広告をクリックされても、アカウントが即停止になることはありませんでした。
ただ、広告を連打されたことでプラグイン(WP QUADS)に負荷が発生してしまい、それに関連してサーバー側にも高負荷が掛かっていたというわけです。
この時点で確信があったわけではありませんが、WP QUADSが503エラーの不具合に関係していると踏んだ私は直ぐにこのプラグインを停止し、削除しました。
その後、私はサーバーに対して、高負荷を軽減する措置を講じたことをメールしました。
いつもお世話になっております。
ご連絡頂いておりましたサーバー負荷の件ですが、
過負荷の原因と思われるプラグイン【AdSense Integration WP QUADS】を停止の上、削除致しました。つきましては、
サーバーへの負荷を調査して頂き、
その上で制限措置の解除を検討して頂ければ幸いです。お忙しいところ恐縮ですが、何卒宜しくお願い致します。
すると、後日サーバーから以下の回答が送られてきました。
ご利用のサーバーにおける制限を解除し、
弊社にてサーバーの監視を続けておりましたが、
負荷状況は問題のないレベルまで改善されたようでございます。
こうしてアクセス制限を解除してもらうことができ、503エラーを根本的に解消することが出来たというわけです。
この対策以降、当該Webサイトで503エラーは発生していないため、やはりWP QUADSが原因だったようです。
ただ、これはあくまでも私の場合に限定した解消方法であり、全ての方に共通して有効とは言えない点に注意が必要です。
しかし、サーバー側でアクセス制限が実施された場合には、その原因となる情報やヒントが記載されているはずです。
そのため、そのメールを熟読し、まずは高負荷の原因を特定することは何よりも大切です。
コメント