AMIMOTO AMI(HHVM)とPHP7で性能比較

WordPressは素の状態だと遅いですね。このブログは、AWSのt2.smallを使っているんですが1秒近く応答に時間がかかってます。環境はNginx + php-fpm(PHP5.6)です。WordPressに限らず最近PHPのパフォーマンスと言うとHHVMを使うかPHP7を使うか迷うところですが、少しでも改善できないか実際にこの2つを計測して検討しました。

結果、ぼくは当面HHVMは触らずPHP7を使っていく予定です。

今の環境は下記のような構成になっています。

  • EC2 (t2.small)
  • RDS (db.t2.micro)
  • S3

最初EC2はt2.microにしてたんですが、メモリ(1GB)が足りずスワップが発生して不安定だったのでt2.smallにしています。

PHP5.6(php-fpm) を計測する

まずHHVMやPHP7で計測する前に素の何もしてない状態で計測します。OPcacheも有効になっていません。なお、今回計測にはloader.ioを利用しています。1サイトに限り1回のテストにつき計測時間1分までだったら無料で使えます。

NewImage

テストの条件は下記のようになっています。

NewImage

  • 計測時間は1分
  • 1分の間に0から100までクライアント数を増加させる

上記グラフの途中で青い線の応答時間が横ばいになってますが、これはクライアント数が80に達したあたりでタイムアウトが多すぎてテストが途中で終わってます。最小応答時間も1000ミリ秒を超えていてアクセスがない状態でもそこそこ時間がかかっているのが分かります。

項目 数値
平均応答時間 8330?
最小応答時間 1148ms
処理数 84?

PHP5.6(php-fpm) + OPcache を計測する

OPcacheを有効にして同条件で計測します。

NewImage

クライアント数100台の時点で応答時間が10秒になってしまっているものの安定して処理できているように見えます。OPcache入れるだけで効果ありますね。ここまで違うと思いませんでした。

OPcache無効の計測が途中で終わってしまっているので比較が出来ませんが、最小応答時間は4割減になっておりかなり改善しています。

項目 数値
平均応答時間 6301ms
最小応答時間 690ms
処理数 386

PHP7 (php-fpm) を計測する

次にPHP7を計測します。OPcacheは無効にしてあります。

NewImage

PHP5.6のOPcache有効と類似している結果になりました。

項目 数値
平均応答時間 6387ms
最小応答時間 545ms
処理数 383

PHP7 (php-fpm) + OPcache

次にOPcacheを有効にして計測します。

NewImage

かなり効果があるのが分かります。PHP5.6のOPcache有効と比較すると最小応答時間は6割減少し、スループットは3.3倍になっています。PHP7が高速になったというのは本当なんだと実感。

項目 数値
平均応答時間 2172ms
最小応答時間 286ms
処理数 1293

あれ、HHVMより速い?

AMIMOTO AMI(HHVM)を今回の計測で利用しているRDS(db.t2.small)を読むようにwp-config.phpを書き換えなるべく同条件にして計測しました。

NewImage

環境のせいか分かりませんが、自前で構築したPHP7のほうが倍以上性能が良くでました。AMIMOTOは初めて起動したのでもしかしたら使い方を間違っているのかもしれませんが…。

項目 数値
平均応答時間 4609ms
最小応答時間 441ms
処理数 580

PHP7を使おう!

今回最初にHHVMを調べ始め実際にインストールなどしてたのですが、CentOSやAmazonLinuxは公式のビルド済みのパッケージがなく、コミュニティが作成したパッケージはバージョンも古く、エラーも出てうまくインストールができないという残念な状態でした。

逆にPHP7はPHP5.6用の自前のChefレシピでremi56をremi70に変えてやるだけですんなり導入できました。それで、今回計測してみたら思っていた以上にHHVMよりも良い数値が出たので俄然PHP7を使っていきたくなりました。

NewRelicのPHP7対応も間近?

こちらを見るともうすぐで入手可能になりそうです。これが出たら早速使いたいと思います。

PHP Agent and PHP 7.0