WordPress on PHP5.4.0 RC4 + APC

明けましておめでとうございます。本年も、よろしくお願いいたします。

スクリーンショット(2012-01-03 11.15.50)さて、パフォーマンスアップしたと噂の 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 の正式版公開楽しみすなぁ。

WordPress on PHP5.4.0 RC4 + APC」への8件のフィードバック

  1. noto

    abの実行結果で”Failed requests” されてますが、そこは無視してもいいのでしょうか?

    返信
      1. noto

        ですよね(笑
        ボクもNginx(1.2) + PHP-FPM(PHP5.4.4) + APC + WordPressで構築している途中なのですが、ベンチマークを取るとブログに載っているような実行結果(Failed requestsが多発する)の状態で困っているところです・・・

        恐らくPHPーFPM周りじゃないかなとは思っているのですが。

        返信
        1. noto

          自己解決しました。

          ボクの場合、WPのデフォルトテーマでベンチマークをとっていました。
          WPのデフォルトテーマはリクエスト毎にTOPの写真がランダムで入れ替わる為、レスポンスデータサイズが変わります。

          abはDocument Lengthの値が一定であることをリクエスト成功の条件としている為、動的なページはFailed requestsが発生してしまいます。

          試しに静的なテーマを選択し、同じ条件でベンチマークをとってみたらFailed requestsの発生は見られませんでした。

          返信
          1. をかもと 投稿作成者

            おっ、そう言われてみれば、確かにそうですね!
            指摘ありがとうございます、後で本文に追記しておきます。

            返信

コメントを残す

メールアドレスが公開されることはありません。