サーバー過負荷の原因

Trackback Albirexのサイトが503エラー(プログラム過負荷によるサーバーエラー)を頻発するため、やむを得ず別サーバーをレンタルして運用開始して2週間が過ぎた。
エラーに関してさくらサーバーさんに問い合わせのメールを出したところ、こんな返事が返ってきた(要約)。

あなたのサーバを確認したところ、CGIやPHPによる過負荷やアクセス数等に関する制限がかかっていた。いったん緩和するけど、今後同様にサーバに許容範囲を超える過負荷等が発生したら、また制限が設けられる可能性があるよ。

特段アクセス数が多いわけでもないし、負荷がかかるプログラムを使っているわけでもないので、なんでエラーを起こすのか(というか、プロバイダ側からアクセス制限をかけられるのか)、いまいち不思議ではあった。ふと思いついて調べてみると、原因と思われることにぶつかった。これだ。
「条件付きGET」のススメ@Ogawa::Memoranda

PHPファイルなどの動的コンテンツにアクセスした時には、上記の両ヘッダを返されないため、そのままでは条件付きGETが行われません。

簡単に言うと、インターネットの世界では、サーバーにあるデータの更新時刻ととパソコン内にあるデータの更新時刻を比較して、サーバーのデータの方が新しければサーバーからデータを読み込み(条件付GET)、そうでなければパソコン内からデータを読み込む、という仕組みになっている。
ホームページの画面というものは、アクセスするたびにサーバーからダウンロードされるわけではなくて、以前見たときから更新されていないページならば、自分のPCに保存されたデータを読み出して見ていることになるわけだ。そうすることによってサーバーからダウンロードされるデータ量を減らすことができるので、情報の交通渋滞が起きるのを防止できるってわけ。
拡張子が「.html」になっているページは上記のような更新時刻をチェックする仕組みがあるんだが、Trackback Albirexのサイトは各ページの拡張子が「.php」になっているので、そのままでは更新時刻を知ることができない。従って、毎回アクセスするたびにデータのダウンロードが発生するので、「過負荷」状態が発生してしまう。
解決策としては、phpのページにも、htmlページと同様の「Last-Modifiedヘッダ」を付加してやればよいわけで。
その方法が上述ページに記載されております。
さっそくやってみようと思ってるところ。



  •  

    ブログパーツの貼り付け方はこちらへ
  • 月別アーカイブ

  • あいさつ掲示板

  • メタ情報