Mazn.net

やってみて 調べてみて 苦労しなけりゃ 箱は動かじ

WordPress高負荷対策→同一ApacheのIPのアクセス数制限@CentOS 5

      2011/10/08

一日に数回サーバ高負荷で応答がなくなってしまって困っていました。load average 90超え!!ありえん・・・
低性能なサーバなのに、大してApacheもMySQLものチューニングしていないからなあ・・・

ということで、最初はWordpressがアクセスしているMySQLが重たいのではと思い、メモリや接続数を少なくしてみたが効果なし。ということで、基本に戻って、まずは現状把握から。

sysstat パッケージでsarによる性能情報収集を開始し、topの結果を数秒おきにログに保存、さらに長い時間がかかるSQLもログに記録するようにしてみてわかったこと。それは、

  • DoSアタックとは言わないが、同一IPからの大量アクセスが発生
  • httpdプロセスが大量に生成
  • 非力なサーバでスワップが発生しまくり
  • 処理しきれずダウン

という典型的な非力サーバの事象でした。

で、httpd.confをよく見ると、ServerLimitやMaxClients がデフォルトで 256 と、非力なサーバでは処理しきれない値になっている・・。とりあえサーバの最大プロセス数を数個に削減。そんなにアクセスがあるサーバではないので問題ないと思う。

次に、同一IPからの連続アクセスは制限をかけました。

具体的には、mod_limitipconn というApacheモジュールを入れました。
これはその目的通り、同一IPからの接続を制限するためのモジュールです。epel のリポジトリに入っているので、リポジトリを設定している人であれば、インストールは

 # yum install mod_limitipconn

とするだけです。リポジトリ設定していない人は、この辺りから適当にRPMをダウンロードしてインストールしましょう。
あとは、httpd.conf に

 MaxConnPerIP 5

と追記して、apacheをリロードすれば、どういつIPからは5接続に制限できます。制限に達するとレスポンスコード503が返ります。

ちなみに、同じページに画像などが複数あると、この接続数に達して、画像が一部表示できないことがあります。なので、対象のディレクトリの設定で、

<Directory "/var/www/html">
   ~ 省略 ~
    NoIPLimit image/*
</Directory>

と記述してあげれば、画像はこの制限から除外することができます。

 

参考 : Apache で同一IPからの接続数を制限する mod_limitipconn 設定方法

MaxClients

 - IT技術, サーバ構築, ネットワーク , , ,

336px

Message

メールアドレスが公開されることはありません。

  関連記事

no image
Javaアプリの日本語文字化け対策

Linux上のSunのJVMで、GUIアプリを動かすと文字化けしてしまいます。 …

no image
OpenStackをインストール中にはまった@Ubuntu 12.04

OpenStack は様々なコンポーネントがあるため、インストールのための支援ツ …

no image
QRコードスキャナーのようなカメラ使うアプリが起動しない@Galaxy S (2.2)

標準のカメラアプリは正常に動作するのに、QRコードスキャナやFxCamera と …

no image
ciscoコマンド覚え書き

普段あまりcisco製品触ることないので単なる覚え書き いろいろな情報を一気に取 …

no image
PS3のアップデートチェック

PS3をインターネットに繋いでいると、起動時にソニーのサイトにアップデートチェッ …

no image
Samsung KiesでService Initiali Failed エラー@Windows 7 64bit

Galaxy S管理用のソフト、SamsungのKiesをインストールすると、W …

no image
プログラミングコンテストの模擬練習(ババ抜き)を解いてみた

以下で紹介されていたプログラミングコンテストの模擬練習問題(ババ抜き)をpyth …

no image
viで制御コードの入力

.vimrcといった設定ファイルを書いていると、制御コードを入力したいときがあり …

no image
Firefox7のプチフリ対策

Firefox 7 にしてから、Firefoxが定期的にフリーズしてしまいます。 …

no image
bash使用時にCtrl-dでログアウトさせない

bashではCtrl-○でいろいろな機能が使用できますが、たまに間違って押してし …