PHPの高速化とその効果
webサーバーにMMCacheをいれてみました、効果がありました
PHPを高速化するためのキャッシュツールは幾つかあります。いままではAPCを使っていました。しかしサーバーをwoodyからアップグレードしたsargeにはパッケージがなく、しばらくはキャッシュなしで運用していました。
最近調べてみるとsargeにTurck MMCacheがあることがわかりました。
apt-get install turck-mmcache でインストールすると /etc/php/apache/php.ini に自動的に設定が書き加えられますが、サーバーが貧弱なので設定を少し変更しました。
;The lines below were added by the Turck-MMCache install script. ; turck-mmcache
zend_extension="/**/*****/**/mmcache.so" ; turck-mmcache
mmcache.shm_size="1" ; turck-mmcache
mmcache.cache_dir="/***/*****/turck-mmcache" ; turck-mmcache
mmcache.enable="1" ; turck-mmcache
mmcache.optimizer="1" ; turck-mmcache
mmcache.check_mtime="1" ; turck-mmcache
mmcache.debug="0" ; turck-mmcache
mmcache.filter="" ; turck-mmcache
mmcache.shm_max="0" ; turck-mmcache
mmcache.shm_ttl="300" ; turck-mmcache
mmcache.shm_prune_period="600" ; turck-mmcache
mmcache.shm_only="0" ; turck-mmcache
mmcache.compress="1" ; turck-mmcache
設定の内容についてはこちらを参照してください。
ab -c 10 -n 100 でのベンチマークの結果
ページ1 (/uni/index.phpです。)
キャッシュ無し
Requests per second: 84.32 [#/sec] (mean)
Time per request: 118.60 [ms] (mean)
Time per request: 11.86 [ms] (mean, across all concurrent requests)
Transfer rate: 379.43 [Kbytes/sec] received
キャッシュ有り, mmcache.compress="0"
Requests per second: 104.17 [#/sec] (mean)
Time per request: 96.00 [ms] (mean)
Time per request: 9.60 [ms] (mean, across all concurrent requests)
Transfer rate: 468.75 [Kbytes/sec] received
キャッシュ有り, mmcache.compress="1"
Requests per second: 112.74 [#/sec] (mean)
Time per request: 88.70 [ms] (mean)
Time per request: 8.87 [ms] (mean, across all concurrent requests)
Transfer rate: 507.33 [Kbytes/sec] received
ページ2 (pukiwikiのページです)
キャッシュ無し
Requests per second: 1.10 [#/sec] (mean)
Time per request: 9092.40 [ms] (mean)
Time per request: 909.24 [ms] (mean, across all concurrent requests)
Transfer rate: 4.04 [Kbytes/sec] received
キャッシュ有り, mmcache.compress="0"
Requests per second: 2.29 [#/sec] (mean)
Time per request: 4365.20 [ms] (mean)
Time per request: 436.52 [ms] (mean, across all concurrent requests)
Transfer rate: 8.42 [Kbytes/sec] received
キャッシュ有り, mmcache.compress="1"
Requests per second: 2.26 [#/sec] (mean)
Time per request: 4434.40 [ms] (mean)
Time per request: 443.44 [ms] (mean, across all concurrent requests)
Transfer rate: 8.29 [Kbytes/sec] received
キャッシュ有り, mmcache.compress="1" mmcache.shm_size="16"
Requests per second: 2.58 [#/sec] (mean)
Time per request: 3876.90 [ms] (mean)
Time per request: 387.69 [ms] (mean, across all concurrent requests)
Transfer rate: 9.48 [Kbytes/sec] received
カウンタのような簡単なスクリプトでも2割増し、pukiwikiのように複雑なプログラムは倍以上の処理速度になります。
compressは今回のベンチマークでは誤差の範囲内ですがキャッシュされるページが多い場合は役立つのかも知れません。
キャッシュが1Mと16Mで差は10%程度でした。サーバーのメモリーと相談して決めれば良いと思います。Linuxでは余ったメモリーはディスクキャッシュに利用されるのでサーバーのメモリーが少ないこととトータルのパフォーマンスを考えて1Mにしておきました。