MediaWikiのキャッシュ機能でどれくらいアクセス速度を早く出来るか、比較してみた。
■ 実証環境
・FreeBSD 7.1
・MediaWiki 1.18.1
・PHP 5.2.17 (CGI版)
・MySQL 5.5 (UTF8, データはバイナリ形式保管)
■APCの有効化
実証環境は共有レンタルサーバ(さくらインターネット)のため、APCをユーザディレクトリに置いて利用することにする。
APCライブラリを公式ページからダウンロードし、ビルド
※ 実証環境の「さくらインターネット共用サーバ)ではAPC ver 3.1.7〜3.1.9(最新版)は、動作しない。
※ --with-php-config は使っているPHPのバージョンに合わせること
$ wget http://pecl.php.net/get/APC-3.1.6.tgz
$ tar xvf APC-3.1.6.tgz
$ cd APC-3.1.6
$ phpize
$ ./configure --with-php-config=/usr/local/php/5.2.17/bin/php-config
$ make
出来上がったライブラリを、適当なディレクトリにコピー
$ cp modules/apc.so ~/usr/lib/php5/
php.iniに次の設定を追加
※ さくらインターネット共用サーバでは、サーバのコントロールパネルでphp.iniに追加する
extension_dir=/home/user/usr/lib/php5/
extension=apc.so
APCがPHPにロードされているかを確認するため、phpinfo.phpファイルをつぎの内容で作成してアクセスし、APCの項目があればよい。
<?php echo phpinfo(); ?>
キャッシュ状態は次のようなスクリプトを作って表示させるか、APCのソースパッケージに含まれる apc.php で詳細を表示できる。
<html>
<body>
<pre>
<?php
print_r(apc_sma_info());
print_r(apc_cache_info());
?>
</pre>
</body>
</html>
■ MediaWiki のキャッシュ設定
つぎの3種類のキャッシュが利用できる
・APC
・システムキャッシュ
・記事キャッシュ
LocalSettings.phpの設定は
APCを使う場合
$wgMainCacheType = CACHE_ACCEL;
APCを使わない場合は
$wgMainCacheType = CACHE_NONE;
システムキャッシュにテンポラリファイルを使う場合、書きこむディレクトリを指定する
$wgCacheDirectory = "$IP/cache";
システムキャッシュを使わない場合は、上述の設定は行わない
記事キャッシュにテンポラリファイルを使う場合、書きこむディレクトリを指定する
$wgUseFileCache = true;
$wgFileCacheDirectory = "$IP/cache";
$wgShowIPinHeader = false;
記事キャッシュを使わない場合は、上述の設定は必要無い
■ ベンチマーク
それぞれのキャッシュをON・OFFして、アクセス速度を比較してみた。コマンドラインからつぎのようにベンチマークプログラムを実行して、Time per request: 0000[ms]
と表示されている部分を比較する。(システムが安定するまで、数回実行した後の結果を採用する)
$ ab -c 1 -n 50 http://www.example.com/mw/index.php?title=Test_topic
SC=on/TC=off | SC=off/TC=off | SC=on/TC=on | SC=off/TC=on | |
---|---|---|---|---|
APC=on | 990 | 1100 | 470 | 590 |
APC=off | 830 | 900 | 470 | 590 |
※SC:システムキャッシュ、TC:記事キャッシュ
APCがちゃんと動いていないのか…
APCは平均的に50msアクセスを早くするという論評もある。
・Five minutes of MediaWiki performance tuning
■ PHP (CGI版)では動かない?
・さくらインターネットのPHPではアクセラレータのキャッシュ機能による高速化ができない?
ということだそうです。
Apacheモジュール版のPHPが稼動している別のサーバで試してみたところ
SC=off/TC=off | SC=on/TC=on | |
---|---|---|
APC=on | 70 | 10 |
APC=off | 160 | 60 |
※SC:システムキャッシュ、TC:記事キャッシュ
なお、APCはphp.iniでモジュールを組み込んだら、$wgMainCacheType のせっ定にかかわらずキャッシュが効くようである。
■ 結論
このベンチマーク結果からだけ言えば、システムキャッシュ有効、記事キャッシュ有効、APC無効とするのがよいのかもしれない。