明けましておめでとうございます。本年も、よろしくお願いいたします。
さて、パフォーマンスアップしたと噂の PHP 5.4 系。
WordPress も、ちゃんと動くんかいな?と思って試してみました。
使用しているプラグインによっては問題が出てくるかもですが、とりあえずデフォルト状態の WordPress 3.3 + TwentyEleven では問題なさそうです。
あと、このサイトで使ってるプラグインでも問題は発生しなかったようです。
ちなみにこのサイトで使ってるプラグインの一覧は以下の URL で見ることができます。
https://dogmap.jp/plugins/3/
でまぁ、テスト用に借りてるさくらのVPS512(CentOS 5.6 64bit版) に WordPress 入れて ab で簡単にベンチを取ってみた訳なんですが、こんな感じになりました。
素の状態と APC 入れた状態で、それぞれベンチ取りました。リバースプロキシとかは入れてないです。
Web サーバは Nginx + php-fpm で構築、ネットワークがボトルネックにならないように localhost へのアクセスで計測しました。
テストに使った PHP 5.4 のビルドオプションは、こんな感じ。
--prefix=/usr/local/php5.4 \ --enable-mbstring \ --with-mysql --with-pdo-mysql --with-mysqli \ --enable-pcntl \ --enable-fpm --with-fpm-user=nginx --with-fpm-group=nginx \ --with-openssl \ --with-pcre-regex \ --with-zlib \ --with-mhash \ --with-xsl \ --with-mcrypt \ --with-pear \ --with-gd --enable-gd-native-ttf \ --enable-intl \ --enable-exif \ --enable-ftp \ --without-unixODBC \ --disable-posix \ --disable-sysvmsg \ --disable-sysvshm \ --disable-sysvsem \ --disable-debug
まずは、APC とか有効にしていない状態の PHP 5.3.8 と 5.4.0 RC4 での WordPress トップページへのアクセスの ab 結果。
PHP 5.3.8
$ ab -n 100 -c 10 http://localhost/ Server Software: nginx Server Hostname: localhost Server Port: 80 Document Path: / Document Length: 6182 bytes Concurrency Level: 10 Time taken for tests: 12.521301 seconds Complete requests: 100 Failed requests: 86 (Connect: 0, Length: 86, Exceptions: 0) Write errors: 0 Total transferred: 638985 bytes HTML transferred: 618285 bytes Requests per second: 7.99 [#/sec] (mean) Time per request: 1252.130 [ms] (mean) Time per request: 125.213 [ms] (mean, across all concurrent requests) Transfer rate: 49.84 [Kbytes/sec] received Connection Times (ms) min mean[+/-sd] median max Connect: 0 0 0.2 0 1 Processing: 465 1214 922.9 1103 9930 Waiting: 464 1208 919.3 1102 9891 Total: 465 1214 922.9 1103 9930 Percentage of the requests served within a certain time (ms) 50% 1103 66% 1177 75% 1268 80% 1303 90% 1403 95% 1459 98% 3078 99% 9930 100% 9930 (longest request)
PHP 5.4.0 RC4
$ ab -n 100 -c 10 http://localhost/ Server Software: nginx Server Hostname: localhost Server Port: 80 Document Path: / Document Length: 6186 bytes Concurrency Level: 10 Time taken for tests: 10.539823 seconds Complete requests: 100 Failed requests: 93 (Connect: 0, Length: 93, Exceptions: 0) Write errors: 0 Total transferred: 638963 bytes HTML transferred: 618263 bytes Requests per second: 9.49 [#/sec] (mean) Time per request: 1053.982 [ms] (mean) Time per request: 105.398 [ms] (mean, across all concurrent requests) Transfer rate: 59.11 [Kbytes/sec] received Connection Times (ms) min mean[+/-sd] median max Connect: 0 0 0.5 0 3 Processing: 370 1030 658.3 869 5196 Waiting: 369 1029 658.3 869 5196 Total: 371 1030 658.3 869 5196 Percentage of the requests served within a certain time (ms) 50% 869 66% 1007 75% 1042 80% 1112 90% 1401 95% 2310 98% 4186 99% 5196 100% 5196 (longest request)
「Requests per second」が 7.99 [#/sec] から 9.49 [#/sec] に改善されてますね。2割弱のスピードアップ。
次に APC を有効にした場合のパフォーマンスチェック。
64bit版 CentOS に PHP 5.4 入れた場合は、pecl から APC をインストールすると正常に動作しなかったので、trunk 版の APC をインストールして確認しました。
trunk 版 APC のビルド&インストール方法は、下記URLを参考にしてください。
Installing APC from beta/alpha development onto centOS 5.4 64 bit dual core
PHP 5.3.8 with APC
$ ab -n 100 -c 10 http://localhost/ Server Software: nginx Server Hostname: localhost Server Port: 80 Document Path: / Document Length: 6182 bytes Concurrency Level: 10 Time taken for tests: 8.223347 seconds Complete requests: 100 Failed requests: 85 (Connect: 0, Length: 85, Exceptions: 0) Write errors: 0 Total transferred: 639018 bytes HTML transferred: 618318 bytes Requests per second: 12.16 [#/sec] (mean) Time per request: 822.335 [ms] (mean) Time per request: 82.233 [ms] (mean, across all concurrent requests) Transfer rate: 75.88 [Kbytes/sec] received Connection Times (ms) min mean[+/-sd] median max Connect: 0 0 1.1 0 6 Processing: 154 792 249.6 797 1954 Waiting: 153 792 249.6 796 1952 Total: 156 793 249.4 797 1956 Percentage of the requests served within a certain time (ms) 50% 797 66% 899 75% 915 80% 935 90% 1071 95% 1163 98% 1413 99% 1956 100% 1956 (longest request)
PHP 5.4.0 RC4 with APC
$ ab -n 100 -c 10 http://localhost/ Server Software: nginx Server Hostname: localhost Server Port: 80 Document Path: / Document Length: 6184 bytes Concurrency Level: 10 Time taken for tests: 4.913902 seconds Complete requests: 100 Failed requests: 76 (Connect: 0, Length: 76, Exceptions: 0) Write errors: 0 Total transferred: 639024 bytes HTML transferred: 618324 bytes Requests per second: 20.35 [#/sec] (mean) Time per request: 491.390 [ms] (mean) Time per request: 49.139 [ms] (mean, across all concurrent requests) Transfer rate: 126.99 [Kbytes/sec] received Connection Times (ms) min mean[+/-sd] median max Connect: 0 0 0.3 0 2 Processing: 161 478 129.9 460 862 Waiting: 160 476 129.8 455 862 Total: 161 478 129.9 460 862 Percentage of the requests served within a certain time (ms) 50% 460 66% 500 75% 520 80% 528 90% 659 95% 819 98% 844 99% 862 100% 862 (longest request)
7割近くも改善されてることが分かると思います。
PHP 5.4 の正式版公開楽しみすなぁ。
abの実行結果で”Failed requests” されてますが、そこは無視してもいいのでしょうか?
おうふ、そこは無視しちゃいけないですね。
ですよね(笑
ボクもNginx(1.2) + PHP-FPM(PHP5.4.4) + APC + WordPressで構築している途中なのですが、ベンチマークを取るとブログに載っているような実行結果(Failed requestsが多発する)の状態で困っているところです・・・
恐らくPHPーFPM周りじゃないかなとは思っているのですが。
自己解決しました。
ボクの場合、WPのデフォルトテーマでベンチマークをとっていました。
WPのデフォルトテーマはリクエスト毎にTOPの写真がランダムで入れ替わる為、レスポンスデータサイズが変わります。
abはDocument Lengthの値が一定であることをリクエスト成功の条件としている為、動的なページはFailed requestsが発生してしまいます。
試しに静的なテーマを選択し、同じ条件でベンチマークをとってみたらFailed requestsの発生は見られませんでした。
おっ、そう言われてみれば、確かにそうですね!
指摘ありがとうございます、後で本文に追記しておきます。
次のphp5.4、楽しみですね
webアプリ言語は色々あるけど個人的にはphpは大好きです
https://dogmap.jp/2007/07/09/wordpress-livedoor-blog/
これのバージョンアップをしていただけないでしょうか
コメント欄にも書いてますが、そのプラグインをメンテナンスするつもりはありません。
https://dogmap.jp/2007/07/09/wordpress-livedoor-blog/#comments
ライセンスは明記していませんが GPL V2 としておきますので、どうしても必要ということであれば、ご自分で修正してお使いください。