WordPressがヤバイ! ってのとオマケ

WordPressは・・・F5で落ちる

(この記事を書いた後にWordpressの最新バージョンがリリースされましたが、そのバージョンでも落ちるかどうかは確認してません。ご了承ください。)

まぁ,その通りで現バージョンのバージョン3.8のWordPressApache上で動かしていて特にチューニングをしなかったら

落ちちゃうの

どうやら以前のバージョンなら平気っぽいです.

ちょっと試したら3.2.1ならF5連打しても普通に耐えちゃいますね.

どのバージョンからそうなっているのかまだ確かめていませんが,少なくとも3.6以上だとアウトです.

ここ一年くらいアップデートしてなかったので,気づきませんでした.

WordPressを使うとこは多いと思うので気をつけた方がいいですね.

そういえば「ある大学の研究室のWebサイトはF5を5秒押して落とせるらしい」っていうのを友達の友達が言っていました.

お気の毒な研究室ですね.

もう一度言います.

そういえば「ある大学の研究室のWebサイトはF5を5秒押して落とせるらしい」っていうのを友達の友達が言っていました.

お気の毒な研究室ですね。

言いたいことはこれだけです.

以下の説明はどうでもいいです.

対処法

対処法としてはApache側で設定をいじるか,WordPressプラグインでなんとかするっていうのがありますね.

私はWordPressをいじったり,プラグインを入れたりしたことがあまりないのでApache側の方で対処しました.

preforkの設定

Apacheは複数のプロセスを生成してクライアントとの接続を処理するのですが,今回のようにF5アタックなどで多量のアクセスが来るとプロセスが大量に生成され処理しきれなくなります.その結果サーバが落ちちゃうんですな.

じゃあたくさんプロセス作れないようにhttpd.confを弄りましょう 以下はデフォルトの設定ですね.

〜〜〜〜〜〜〜〜〜〜〜〜〜

<IfModule prefork.c>
StartServers    8
MinSpareServers 5
MaxSpareServers 20
ServerLimit     256
MaxClients      256
MaxRequestsPerChild 4000
</IfModule>

〜〜〜〜〜〜〜〜〜〜〜〜〜

この部分のMaxClientsとServerLimitの数値が同時接続数,つまり応答することができる同時リクエスト数です.WordPressが落ちないようにするには,この数値を小さくしてメモリを食いつぶさないようにします.

どのような数値にすべきかはそのサーバのスペックやOSなどの環境によって変わると思うのでいろいろ数値を変えて試行錯誤してください.

目安としては

Apacheに割り当てられるメモリ量 / Apacheの子プロセス1つあたりのメモリ消費量

位だと思います.でもやはり試行錯誤だと思います.

でもね。この設定をしてもたっくさんアクセスが来ちゃうとすぐ落ちちゃいます。

じゃあどうするか?

同じIPアドレスからの過剰なアクセスを遮断する

この方法なら大学生がふざけてF5アタックをしても耐えることができます.

これをApacheで実現するには「mod_limitipconn」というモジュールを使います.

yum install mod_limitipconn 

でモジュールをインストールできます。

その前に確かEPELをインストールする必要があったと思うのですが,その方法は省略します.

インストールできたらhttpd.confに

<IfModule mod_limitipconn.c>
        MaxConnPerIP 10
</IfModule>

と設定します.これは同じIPから10個より多くコネクションがあるとアクセスを制限する設定です.

もっと細かい設定もできますが,とりあえず簡単なIP制限だけ説明しておきました.

というわけで…WordPressおふぁっくだというのと,ほんの少しでいいからApacheの設定をいじってみてはいかが?って話でした.

オマケ

Webサーバのベンチマークのツールとしてabコマンドがあります.

ab -n [リクエスト回数] -c [同時接続数] [接続先URL]

コマンド自体の使い方は上のとおりです.たとえばab -n 1000 -c 500 http://example.com/だと500の接続をhttp://example.comに1000回送るという感じです.

このコマンドなんですが,OpenSUSEで使おうと思うとabではなくてab2なんですね.

最初「えっabコマンドな゛い゛の゛ぉ?」ってなりましたが,調べてやっとわかりました.

ただそれだけ