はじめに
ここ数日でブログに少し手を入れたので、現時点の備忘録です。内容的には半年前に四苦八苦した部分がほとんどですが、超オーソドックス設定なので、まとめておいて損はないでしょう。
なお、うちでは1日5万PV以上が出なくてテストできないだけで、たぶんもう少しは捌けます。
事の起こりは一年前。ブログを一新する際に日和ってWordPressを選択したのですが、計算してみるとピークに3PV/秒越えると発狂する計算に。あれ?
まがりなりにもVPSをほぼ丸々割り当ててるので、個人レベルのブログなら鼻歌交じりに処理できるとか思ってたんですが、PHPのメモリの喰い方とApacheのデフォルト設定のアホさを嘗めていました。
その後、いろいろとありながらも安定運用には到達したので、何かあった時に再現出来るように書き残しておきます。
環境:さくらのVPS 1Gプラン Debian squeeze + Apache 2.2.16 + PHP 5.3.3
Apache設定
apache2.conf(Debian系以外でのhttpd.conf)周りから。
- StartServers 10
- MinSpareServers 10
- MaxSpareServers 15
- MaxClients 40
- MaxRequestsPerChild 500
- ServerLimit 256
- MaxMemFree 2048
基本的にうちのサイトは大きい画像はFlickrに逃がしてありますし、外部ファイル系も束ねてます。この場合は、KeepAliveをOffにして片っ端からセッションぶった切った方がピーク時に溢れず処理できるようです。画像貼りまくりだとか、広告貼りまくりでレスポンス悪い場合にはこの限りではありません。
WordPress設定
- キャッシュ系プラグインはWP Super Cache、DB Cache Reloaded Fix、Head Cleaner、WP Widget Cache
- 重そうなプラグインは、関連Post表示のWordPress Related Post for Japanese 、過去システム時のパーマリンクに飛ばすRedirection、人気記事表示のWordPress Popular Posts、アクセス解析のWordPress.com Statsなど。ただし、キャッシュ効いてるので影響無しなの多い。
- ソーシャルサービス系ボタンや、Google Analyticsなどは手作業埋め込み。
- APCはon。php.iniのmemory_limit = 32M、apc.shm_size = 48。
さくらのVPS 1Gプランですが、これで1日5万PVレベルで人が押し寄せても、問題なく捌けてます。CPU仮想2コア、メモリ1GB環境で、ピーク時のLoad Averageは2.0以下、ピーク抜ければ0.2以下で回ります。
重要な部分
- WordPressは高速化が言われるが、メモリが足りない環境では必ずしもありがたくはない。
- 大量アクセスを捌くには物理メモリ量がほぼ全て。キャッシュしてしまえばCPUやI/O、データベースなどが足を引っ張る事は無い。
- 高速化のメリットは、1アクセス当たりにセッション張る必要のある時間が短くなる点なので、Apache側で処理待ちを溜めない設定に。
- これ以上になるとnginx+fastcgiやらCDNも考えた方が良さそうだが、10万PV/日までなら十分に捌ける……はず。
おわりに
5万PV/日とか言ってますが、普段は1000~2000PV/日なので、本気で取り組むのがダルいです。さすがにこんなみみっちい使い方なのにAWSにしてインスタンス数変わるぜわふー>ω<とか、大げさすぎますしね。
ぶっちゃけ、はてなブログProに移行したいんですけど、301リダイレクトやる方法が無いと、さすがに過去ログのパーマリンク失うのはもったいないんですよねぇ。はてなさん、はてブロのβ取れたんですから、はてダ以外からの移行も考えてくださいよ……。
おまけ
思いつきメモ。
www.hageatama.orgを捨てて、blog.hageatama.orgなどを立てる→blog.hageatama.orgをはてなブログにして、はてダ経由などで過去ログ流し込む→www.hageatama.orgではWordPressを走らせっぱなしで、プラグインにてblog.hageatama.orgの対応記事へと301リダイレクト→Google先生がドメイン移転を認識した当たりでwww側の自然消滅
がSEO的に正しい移転なのかな?
外部からのリンクやブクマとかスターは消えちゃうけど、それはしょうがないか。