Webサーバの負荷が高いので調整してみました

この記事は約4分で読めます。

こんにちは

3月にWebサーバのチューニングを実施して、すごく快調でした。

→ WEBサーバのチューングをしてみました(ApacheのMPMをpreforkからeventに変更)

MPMをpreforkからeventに変更したら、スループットがかなり上がった感じがしました。MPMって並行実行するための方式なんですが、prforkは無難で良かったのですが、いかんせんメモリを沢山消費するのがネックで、メモリ資源が限られてる、今のサーバだと辛いかなと。。メモリを増やすのが楽ですが、増やすをお値段が。。。(^_^;
と言う事で、ケチれる方で対応しました。その中でもレスポンスが上がる様に欲張ってみたんですよね。。

ちなみに使ってるサーバのメモリは2GBで契約してます。

快調に動いてたのですが、最近は時々、負荷が異常に上がる事があります。
徐々に頻度が上がってきてる感じがあります。少し上がる程度だったら良かったのですが、少し前にはロードアベレージが60超えしてしまい、復帰できなくなり強制電源OFFを実施しました。

と言う事で、Webサーバの同時実行数を半分にしてみましたが改善しませんでした。

原因を見ようと思って負荷が上がった時に見てみましたが、やっぱりメモリ不足の様です。Swapが結構出てそうです。(^_^;

ただ、アクセスが増えた。。って事はなさそうなんですよね。少し増えてる程度なんですよね。

サーバを外部から監視してますが、このぐらいに頻度です。放置で復帰はしてますが、負荷が上がったタイミングでアクセスしてみると、表示に凄く時間がかかったり、エラーになりました。やっぱり(^_^;

頻度はこんな感じです。

多いとは言いませんが、低くはないですね。。

同時実行数を極端に減らすか。。悩みましたが、とりあえずKeepAliveの持続時間を減らしてみる事にします。現在の設定はKeepAliveがONで5秒間保持ですす。とりあえず2秒に減らしました。

これで様子を見て、ダメならKeepAliveをOFFにするつもりです。

KeepAliveってなんぞ?と言うと、簡単に言うと、ブラウザからアクセスすると、ブラウザ側から接続要求がサーバにされて、通信が接続します。その時に、ページ頂戴!とか、ページ中の画像頂戴!とかと何度もやり取りが発生しますが、基本的には1つのパーツ毎に、接続→通信→切断を繰り返します。

単純には1つのページに画像が50個あったら、1+50回の通信が発生します。
接続、切断って割とオーバーヘッドが高いんですよね。それを減らす手段としてKeepAliveと言う機能があり、1回接続したら、一定期間は接続した状態を維持して、複数のパーツのやり取りをやりましょう!と言う機能です。

上のスクショの設定だと、1回接続すると5秒間経過するか、100回通信(リクエスト)したら、切断する設定になっています。
困った事に、KeepAliveってブラウザから終わり!をしませんので、一回接続すると決まった時間か回数が事項されるまでは繋ぎっぱなしになります。
なので1回アクセスされると、5秒間は必要なくてもサーバ側は接続を維持します。この接続に使うメモリ量が昔から使ってるApacheと言うWebサーバの場合には割と多いんですよね。。5秒以内に次のページにアクセスすると接続しっぱなしなんで早いんですよね。ただ、アクセスがなければ、5秒間無駄に待機です。(笑)

ブラウザって、基本的に同時接続は2つ(我ながら情報古すぎ)で、2つの接続で並行処理していると思ってましたが、どうも最近のブラウザは回線も早い事もあり(?)同時に6つ接続してくるみたいです。5秒間に10人のアクセスが有れば、接続は50接続必要に。。(^_^;

見てて思うのは、Googleさんのキャッシュ処理が気を使ってユックリとダウンロードしてくれるので、KeepAliveで永遠と接続しっぱなしな様に見えるような気が。。。(^_^;

 

と言う事で、KeepAliveの持続時間を2秒に減らしてみました。

これで様子を見て、ダメなら次はKeepAlive自体をOFFにしようと思います。

KeepAliveがONだとページの表示が結構早くてよいのですが。。仕方ないかなと。。(^_^;

改善してくれると良いのですが。。期待しつつ様子を見ようと思います。

コメント

  1. しげさん、こんにちは。
    webサーバはご自分で構築されているんですか?

    以前、web関連の仕事をしている時は、自社のサーバをハウジングで運用していた事がありましたが、その頃はサーバのスペックも貧弱だし、ソフトもバグが多かったり、セキュリティーホールもあったりと、いろいろと大変でした。

    ホスティングの方がよほど楽だったのですが、容量や金額、自由度も今のような環境ではなかった頃の話です。

    記事を読みながら、内容は違いますが、昔苦労した事を思い出しました。

    • charikettaさん
      コメントありがとうございます。
      webサーバは自分でというか、さくらインターネットのVPSサーバを借りて
      OSからインストールしています。
      OSはCentOS,Webサーバはapacheです。
      面倒見るのが面倒なので、正直趣味じゃなかったらホスティングの方が安心かなと思います。
      仕事で、サーバを何台か面倒を見てるので、一緒に対応してます。
      基本、面倒なのでリポジトリから自動アップデートです(^_^;