WordPressで「データベース接続確立のエラー」が頻発した際に変更すると幸せになれるかも方法
2014/11/22
WordPressで投稿をしていて、公開する際に「500 Internal Server Error」や、
「データベースの接続確立エラー」の表示が頻発することはないでしょうか。
そうしたエラーがどうして発生しているかを考えて、最小限の対応で解決をすると幸せになれるかもしれません。
はじめに
「500 Internal Server Error」や「データベースの接続確立エラー」は、
原因が分からず苦労するものです。
私の場合も、これまで何度か目にはしていたものの一過性のものだと目をつむってきました。
しかし、事態はどんどん悪化していきました。
クロールエラーの検出
Google™ WebMasters Toolsにクロールエラーが表示されるようになってきました。
Google™ Analyticsのページビューを同じように確認してみると、
順調に増加傾向であり、ある線を越えたあたりからエラーが頻発し始めていると読み取れます。
さすがに、クロールエラーが発生し始めてからは事態の深刻さを受け入れます。
何とかしなければ。
サーバーの引っ越しを検討
レンタルサーバのプランとしては共用プランであることから、
アクセスの増加は「過度の負荷」として処理され相手にしてくれるわけはありません。
嫌ならば引っ越してくださいという対応であることは目に見えています。
とはいえ、1,000pv/日程度のアクセス数でこうもエラーが頻発するのでは、
共用レンタルサーバーとしてもあまりにもお粗末な気がします。
引越は現在でも視野に入っていますが、以前DNSの設定ミスを犯したことによって、
地獄のような45日を経験した自分。
DNS障害の被害と影響の甚大さを痛感いたしました
そうそうサーバーの引っ越しへと簡単に結論を出すわけにもいきません。
引越はしっかりとした手順を計画したうえで行うつもりです。
しかし当面のこのエラーだけは消す必要があるわけです。
原因を推測
上記でサーバーエラーとアクセス数の推移をみていくと、
あるラインを超えたアクセス辺りでエラーが発生し始めています。
マスクしてしまっていますが、1,000pv/日のラインです。
また、先日よりWordPressもアクセス増加に関してのアラートを表示していました。
嬉しい悲鳴を伝えてくれるwordpressダッシュボードが可愛い
このアラートも度々表示されるようになって、
直近では「100ページビュー(1時間あたり)」とエラーを見た覚えがあります。
最近はアクセスが集中する時間帯の最大が100pvを超えてくるようになっていました。
この辺りもサーバーエラーの原因の一つかと思います。
設定ファイルの見直し
共用レンタルサーバーで設定の変更が行える部分など、大したことはできません。
せいぜい利用できるのが、php.ini と .htaccess ぐらいなものです。
.htaccess はサーバ設定に関するものは触れられないことがほとんどですので意味がありません。
可能性があるとすると、php.ini による設定です。
私の環境では、以前phpMyAdminのMySQLデータエクスポートエラーが出てしまって、
エクスポートができないという症状に悩まされていました。
phpMyAdminでMySQLエクスポートが途中で切れる場合の対応策
結果として、データベース出力、テーブル出力、レコード出力など、
出力単位を小分けにするという方策のほかに、php.iniの設定も変更していました。
1 2 |
default_socket_timeout = 300 mysql.connect_timeout = 300 |
この設定、デフォルト値を確認しますと以下のようになっています。
PHP: 実行時設定 – Manual (抜粋引用)
default_socket_timeout “60” PHP_INI_ALL PHP 4.3.0 から利用可能です。
default_socket_timeout
integerソケットベースのストリームのデフォルトの有効時間(単位は秒)を定義します。
PHP: 実行時設定 – Manual (抜粋引用)
mysql.connect_timeout “60” PHP_INI_ALL PHP <= 4.3.2 では PHP_INI_SYSTEM で、PHP 4.3.0 以降で使用可能です。
mysql.connect_timeout
integer接続の有効時間(単位:秒)。Linux では、この有効時間はサーバーからの 最初の応答の待ち時間としても使用されます。
共に、60(秒)が初期値となっています。1分を5分に変更してしまっていました。
設定の影響
この設定がどのように影響するかを考えてみますが、詳細な動作まではわかりませんのであくまでも推測です。
このヘルプに明記があるようにどちらも「有効時間(単位は秒)」という有効な接続を維持する時間とも取れます。
この有効な接続時間を、1分から5分に変更したということは設定として5倍。
MySQLとの接続やソケット接続のセッション(?)を維持している時間が5倍という状態かもしれません。
アクセスが 100pv/hour という数値は、1.67 pv/minです。
同時アクセス数が毎分2セッション発生していていき、
そのセッションを5分維持するか1分で破棄するかという感覚ではないかと思います。
平均ページ滞在時間を考えれば、この5分は決して長い時間ではないとは思うのですが、
直帰率がまだ80%近くありますので、大半が直帰されておられます。
キーワードマッチがうまくできず、意図しないページが表示されてい事もよく見受けられます。
ここはセッションの維持時間を減らし、
サーバーの負荷を抑える方向に設定を戻す必要がありそうです。
設定の変更
php.iniの設定をデフォルト設定に戻し、タイムアウト時間を短く設定を変更しました。
※私の環境の場合、php.iniの設定はサーバ上の設定に追加することで変更が行える環境なので、
この設定(行)を削除することで、デフォルト値には戻ります。
ですが、明示的にデフォルト値に設定し残しました。
1 2 |
default_socket_timeout = 60 mysql.connect_timeout = 60 |
設定の効果を静観
設定の変更を1/29 10:30 am に実施してから、2日が経過しました。
その後、データベース接続エラーは今のところ表示されていません。
アクセスに関しても前日(1/30)には、過去最高値を更新している状態ですので減っていません。
設定を戻すことで、一応のところ現在のトラフィックにマッチした設定になっていると思われます。
そもそも、MySQLのエクスポートエラーに対応しようと入れた設定が、
このようなエラーの原因になってしまっていた(と思われる)とは、設定変更は注意したいものです。
今後も、アクセスの推移を見守り、
60秒をそのまま維持するか、
さらに減らして数秒で直帰されてしまったユーザーのセッション30秒程度で破棄するか検討したいと思います。
さいごに
一見すると、レンタルサーバーが貧弱だとか、サーバー側の問題じゃないのか?と、
業者側に原因を押しつけてしまいがちなこうしたエラー。
もしかしたら自分が変更した設定が原因になっているかもしれませんよ?
他の方の対応
検索してみると、同じようなケースが発生しているレンタルサーバーが数社あるようですが、
もしかしたら、こうした設定の相性もあるのかもしれません。
ただ、そうした方がサーバーを引っ越したあとに、
「早くなった!」「エラーがなくなった!」 と喜びの投稿の後、
「 気のせいだった」「結局エラーがまた出た」という情報を見かけない印象なので、
少なくとも、引っ越し先として選定されている数社のレンタルサーバーは、
比較的安定している部分はあるのだろうなという印象です。
A8.net Promotion
レンサバ引越という作業は「もう!」って思って勢いでサーバー契約、引っ越しと一気にはじめてしまうと、
結局大きなミスをして、悪化させる可能性のある作業です。
まずは、足元の小さなことを見返して、できることからやってみるのはいかがでしょうか。
状況の報告
その後は頻発していたエラーがすっきりとでなくなり、安定している印象です。
2014/01/30:エラーが表示されることはなく安定動作しています。
2014/01/31:エラーが表示されることはなく安定動作しています。
その後夕方のアクセス集中時間帯に、投稿公開時に”500 Internal Server Error”が一度発生。
頻度は減っているものの、根本的解決には至っていない模様
2014/02/06:稀に投稿公開時にエラーが出る場合もあるが、以下の通りエラーは発生しなくなっている。
Google™はGoogle Inc. の登録商標(第4478963号及び第4906016号)です。
GoogleロゴはGoogle Inc. の国際登録商標です。
国際登録番号:881006及び926052及び1086299及び1091990及び1145934
Google AdSense™,AdSense™はGoogle Inc. の登録商標(第4899412号)です。
関連記事
-
Netowl™の無料WordPressサーバWPblogの利用登録
Google or AdMax Promotion(it) 禁断の機能がau公式 …
-
livedoor™ブログ(PRO)への独自ドメイン設定するためのDNSレコード登録(お名前.com編)
Google or AdMax Promotion(it) 禁断の機能がau公式 …