WordPressのパフォーマンス向上
Digg経由で「4+1 Ways To Speed Up WordPress With Caching」という記事を読んだので、さっそく実行してみた。
MySQLの設定はデフォルトのままだったので、/etc/my.confに以下の行を追加。
[cache] query_cache_type=1 query_cache_size=20M query_cache_wlock_invalidate=1
それから、eAcceleratorとAPCも迷ったが、どうせなら使ったことがないのにしようとXCacheをインストール。家に置いてあるマシンをサーバにしているので、うるさくないように少しでもロードアベレージを下げるために。
PHP-5.2.1であれば現在の安定板である1.2.0で問題ないようなので、
./configure --enable-xcache --enable-xcache-coverager make make install
でビルドとインストールまで完了したら、デフォルトの設定ファイル(xcache.ini)を編集。PHPのビルド時に何も指定しなかったので、php.iniの末尾に編集後のファイルをリダイレクトで追記したが、問題が起きたときの切り分け用にこれはなんとかした方がいいかもしれない。共有メモリではなくmmapを使う方がいいよ、とのことなので、質問された項目も全部yesに。
こちらのサイトで紹介されている通り、確かにzend_extensionでは動かないようなので普通のextensionと同様にextension = xcache.soにして、xcache.sizeも真似て4Mにした他は、ほとんどの値は推奨値のまま。WordPressを使う際の速度向上と負荷軽減にしか使わないのでカバレッジ機能はOffに。
[xcache-common] extension = xcache.so [xcache.admin] xcache.admin.user = "mOo" xcache.admin.pass = "ここはmd5したパスワード" [xcache] xcache.shm_scheme = "mmap" xcache.size = 4M xcache.count = 0 xcache.slots = 8K xcache.ttl = 0 xcache.gc_interval = 300 xcache.var_size = 0M xcache.var_count = 1 xcache.var_slots = 8K xcache.var_ttl = 0 xcache.var_maxttl = 0 xcache.var_gc_interval = 300 xcache.test = Off xcache.readonly_protection = Off xcache.mmap_path = "/dev/zero" xcache.coredump_directory = "" xcache.cacher = On xcache.stat = On xcache.optimizer = Off [xcache.coverager] xcache.coverager = Off xcache.coveragedump_directory = ""
ここでabでちょっと負荷テスト。今は家族で実家に帰っているので家のマシンが多少うるさかろうと誰も文句はいわない。Apacheのチューニングは全然していない(神よ…)ので、サイトのアクセス状況に合わせて(つまりあんまり誰も見てないので)、同時接続が10で接続数が10という、実に手加減気味の負荷テストになった。
ab -n 10 -c 10 http://selfkleptomaniac.org/index.php
結果、こんな感じ。
対策前:
Concurrency Level: 10 Time taken for tests: 7.227 seconds Complete requests: 10 Failed requests: 0 Broken pipe errors: 0 Total transferred: 395161 bytes HTML transferred: 391381 bytes Requests per second: 1.38 [#/sec] (mean) Time per request: 7227.00 [ms] (mean) Time per request: 722.70 [ms] (mean, across all concurrent requests) Transfer rate: 54.68 [Kbytes/sec] received
対策後:
Concurrency Level: 10 Time taken for tests: 4.351 seconds Complete requests: 10 Failed requests: 0 Broken pipe errors: 0 Total transferred: 378059 bytes HTML transferred: 374279 bytes Requests per second: 2.30 [#/sec] (mean) Time per request: 4351.00 [ms] (mean) Time per request: 435.10 [ms] (mean, across all concurrent requests) Transfer rate: 86.89 [Kbytes/sec] received
秒間2.3アクセスかよ!と叫びたいところだが、対策前の1.3と比べたら全然ましだ。直後のロードアベレージは対策前が1.5程度で、対策後が0.8くらい。まあいっか。
Comments
[…] http://selfkleptomaniac.org/archives/47 […]