PHPを高速化でWordPressを快適にしてみよう

PHPを高速化してWordPressを速く走らせてみよう

WordPressは便利で高機能で使いやすいんだが、メモリー少なめのサーバーには、チト厳しかったりするので、WordPressにCacheを仕込んだり、PHPのメモリー消費量を、思い切り少なくしたりして動作させてみてるわけで、意外とオールインワンなVPSに仕上がってたりしてる。

ただ、もう少し高速にならんもんかと、いろいろ見ていると、php-eacceleratorと言うもんがあるらしい。
動作としては、果たして、非力なサーバーには、効くものかわからないので、試して見ることにした。
なんとなく早くなっていれば、正解。

というわけで、今回は、php-eacceleratorの導入をしてみた。
このeacceleratorというのは、phpが呼び出される際、呼び出し頻度や、共通のコードなどが呼び出されると、ある程度最適化して、2回目からは、バイナリープログラムとして、動作できるようになっている。
と、つまり、最初の呼び出しでは、本来は、phpインタプリターに渡されるコードをこのphp-eacceleratorへも渡すことになるので、余分な仕事をするはず。
でも、2回目phpインタプリターを経由しないで、バイナリーコードとして走るので、結構早くなるわけだが、果たしてどうか。ここServerQueenは、いまいちわからないところがあって、スーパーパイなので計測すると、わりと良い数字を出す。
104万桁の結果が表示されるまでに1分半程度かかるが、実際に動作しているCPUタイムは、17秒前後と速い。
おそらくは、負荷分散とIOのやり取りがボトルネックとなっているのではないだろうか。
参考までに載っけておく。

$ time ./pi 20 >104.txt
real    1m28.895s
 user    0m17.227s
 sys     0m0.736s

$ cat 104.txt
 ------ Started super_pi run : 2012年 8月 5日 日曜日 10:02:22 JST
 ------ Ended super_pi run : 2012年 8月 5日 日曜日 10:03:51 JST
 Version 2.0 of the super_pi for Linux OS
 Fortran source program was translated into C program with version 19981204 of
 f2c, then generated C source program was optimized manually.
 pgcc 3.2-3 with compile option of "-fast -tp px -Mbuiltin -Minline=size:1000 -Mnoframe -Mnobounds -Mcache_align -Mdalign -Mnoreentrant" was used for the
 compilation.
 Start of PI calculation up to 1048576 decimal digits
 End of initialization. Time=       0.243 Sec.
 I= 1 L=       0        Time=       0.681 Sec.
 I= 2 L=       0        Time=       0.941 Sec.
 I= 3 L=       1        Time=       0.921 Sec.
 I= 4 L=       2        Time=       0.836 Sec.
 I= 5 L=       5        Time=       0.799 Sec.
 I= 6 L=      10        Time=       0.904 Sec.
 I= 7 L=      21        Time=       0.870 Sec.
 I= 8 L=      43        Time=       0.912 Sec.
 I= 9 L=      87        Time=       0.890 Sec.
 I=10 L=     174        Time=       0.845 Sec.
 I=11 L=     349        Time=       0.915 Sec.
 I=12 L=     698        Time=       0.932 Sec.
 I=13 L=    1396        Time=       0.889 Sec.
 I=14 L=    2794        Time=       0.885 Sec.
 I=15 L=    5588        Time=       1.037 Sec.
 I=16 L=   11176        Time=       1.054 Sec.
 I=17 L=   22353        Time=       1.028 Sec.
 I=18 L=   44707        Time=       0.843 Sec.
 I=19 L=   89415        Time=       0.764 Sec.
 End of main loop
  End of calculation.    Time=      17.859 Sec.
 End of data output.    Time=       0.090 Sec.
 Total calculation(I/O) time=      17.949(       0.875) Sec.

このようなことを考えると、php-eacceleratorが内部でコンパイルする時間を見込んでも、割合早く動作できることになるのではなかろうか。

今回は、先までにphp-5.3.xの導入が完了しているので、php-eacceleratorをremiから入れるだけで良い。

PHP-eAcceleratorのインストール

# yum install php-eaccelerator --enablerepo=remi

あとは、難しいことは考えないでApacheや、phpを利用していると思しきプロセスを再起動すれば良い。

これだけじゃ、ちと味気ないので、一応、本気で使うための設定は、以下

設定ファイルは、/etc/php.d/eaccelerator.iniを編集
変更するところは、概ね2箇所でOKかと。

eaccelerator.shm_size = "0" ←"0"のままで良いが、特に大きくしたい人は、64とかも可能。(defaultは自動)
eaccelerator.allowed_admin_path = "/var/www/html/eaccelerator" ←ここは、適宜。環境に合わせて。 

# mkdir /var/www/html/eaccelerator
# cp /usr/share/doc/php-eaccelerator-0.9.6.1/control.php /var/www/html/eaccelerator/.
# chown -R apache:apache /var/www/html/eaccelerator
# vi /var/www/html/eaccelerator/control.php
/*** CONFIG ***/
$auth = true;		// Set to false to disable authentication
$user = "admin";
$pw = "eAccelerator";  ←ここを任意のパスワードに忘れずに変更しておく。
:wq!

以上で、設定は終わり。
あとは、念の為に、コンパネにアクセスしてみる。

http://hogehoge.com/eaccelerator/ ←自分の環境に合わせてね。

と、こんな具合に出るので、適宜にコントロールできるが、あまり必要ないかもしれないので、インストールしなくても動作上は問題ないハズ。(パスワードは、自分で設定したのを入力)

まあ、めんどっちぃ!と思う場合は、

# du -h /var/cache/php-eaccelerator

と入力して、cacheが生成していれば走っているものと考えてもいいかな。。
概ね、30MB程度のサイズになっていれば、良好かと。

で、一応、現在走らせてみてるわけだが、まあまあ、早くなってると思う。
期待通りな結果が得られたと思う。
一方、ajaxplorerな人は、劇的なスピードアップを感じると思います。

それではまた。