WordPressの性能解析
XHProf(Hierarchical Profiler)という性能解析ツールを使用して、WordPressにおいて処理に時間がかかっている個所をあぶり出し、可能であれば改善する。既にAPCの導入、ja.moファイルの無効化により大きな改善は見られているため、今回は細々とした改善になると思われる。
1.XHProf導入
まずは、XHProf拡張をコンパイル・インストール。
$ wget http://pecl.php.net/get/xhprof-0.9.3.tgz
$ tar xvfz xhprof-0.9.3.tgz
$ cd xhprof-0.9.3/extension/
$ phpize
$ ./configure
$ make
$ make test
$ sudo make install
/etc/php5/apache2/php.ini
等に以下を追加する。
[xhprof]
extension=xhprof.so
xhprof.output_dir=/tmp
Apacheを再起動(service apache2 restart
)後、XHProf拡張は有効になる。
XHProfではコールグラフを生成できるので、そのために必要なコマンドもインストールしておく。
$ sudo apt-get install graphviz
2.WordPressのプロファイリング
index.phpを以下のとおり編集する(赤字部分を追加する)。/home/www-data/xhprof-0.9.3
は先ほどのxhprof-0.9.3.tgz
を展開したディレクトリ。
<?php
/**
* Front to the WordPress application. This file doesn't do anything, but loads
* wp-blog-header.php which does and tells WordPress to load the theme.
*
* @package WordPress
*/
xhprof_enable(XHPROF_FLAGS_CPU + XHPROF_FLAGS_MEMORY);
/**
* Tells WordPress to load the WordPress theme and output it.
*
* @var bool
*/
define('WP_USE_THEMES', true);
/** Loads the WordPress Environment and Template */
require('./wp-blog-header.php');
$xhprof_data = xhprof_disable();
include_once "/home/www-data/xhprof-0.9.3/xhprof_lib/utils/xhprof_lib.php";
include_once "/home/www-data/xhprof-0.9.3/xhprof_lib/utils/xhprof_runs.php";
$xhprof_runs = new XHProfRuns_Default();
$xhprof_runs->save_run($xhprof_data, "xhprof_foo");
?>
そして、WordPressのトップページにアクセスすると、サーバ上の/tmpディレクトリ配下に5233bea4082fb.xhprof_foo.xhprof
といった名前のファイルが生成される。
3.プロファイル解析
xhprof-0.9.3.tgz
に格納されている以下の2つのディレクトリを、WordPressと同じディレクトリ(例えば、/var/www
)へコピーまたは移動する。
$ cp -rp .../xhprof-0.9.3/xhprof_html /var/www
$ cp -rp .../xhprof-0.9.3/xhprof_lib /var/www
そして、ブラウザから「http://…/xhprof_html/」へアクセスすると、/tmp配下に生成されたプロファイルが一覧表示されるので、ファイルをクリックすると・・・あとは個々の関数呼び出しにかかる時間や割合、コールグラフによる視覚的な呼び出し関係が確認できる(詳細割愛)。
4.解析結果
XHProfの結果をざっと見ると、私個人レベルで簡単に改善できそうな個所はほとんど見られず。ただ、細かい点として、convert_smilies(スマイリーを画像へ変換するフィルタ)に11ミリ秒、自作のカレンダー表示に15msかかっていた。カレンダーはせっかく作ったモノなのでそのままとして、convert_smiliesは不要なので使用しないことにした(管理画面の投稿設定「:-) や :-P のような顔文字を画像に変換して表示する」をオフにする)。
5.ab(ApacheBench)の結果
abコマンド(ab -c 20 -n 200 http://www.k4750.net/
(20多重で200リクエスト))の実行結果について、前回(ja.moの無効化)との比較を以下に示す。
テスト時間(秒) | 秒間リクエスト数 | リクエスト時間 (ミリ秒)(平均) |
|
初期状態 | 26.370 | 7.58 | 2637.035 |
APC導入後 | 12.973 | 15.42 | 1297.319 |
WPLANG変更後 | 8.869 | 22.55 | 886.885 |
convert_smiliesオフ | 8.235 | 24.29 | 823.525 |