T

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くらい。まあいっか。

Posted by on 2月 17, 2007 in PHP, WordPress

コメントを残す