PHP7でCodeIgniterを動かしてパフォーマンス測ってみた

CodeIgniter Advent Calendar 2015 7日目、空いてたので、駆け足ですが、このエントリ登録しました。参考になれば幸いです。 PHP7が遂にリリースされました!

php7codeigniter
PHP 7.0.0 Released

PHPカンファレンス2015でRasmusさんが語っていたPHP7のパフォーマンスアップ、とても興味があったのですがなかなか時間が取れず、やっと試すことができました。

試してみたかったのは、次の点。

1.CodeIgniter3アプリが動作するか?

2.パフォーマンスは向上するか?

一部ではPHP7で期待したパフォーマンス向上が見られないとか、逆に遅くなったとかのツイート等をみたので、自分のところの事情を調べてみたかったです。

また、実際に作ったプロジェクトで最もアクセスされるページのパフォーマンスを調べてみたかった!!

テスト環境

物理的なPCは用意できなかったため、仮想環境での測定となっています。

  • ホストPC,OS CPU Core i7-4770S CPU @3.10GHz
    MEMORY 16GB
    OS Windows10 64bit
    仮想化ソフト VirtualBox5.0.10

  • ゲストOS OS CentOS6.7 Apache 2.4
    DB MySQL5.6 (PHPからはmysqliで接続、QueryCache OFF)
    リソース割り当て 仮想CPU コア1つ
    仮想MEMORY 4GB

動作確認対象

  • CodeIgniter3.0.3デフォルトのWelcomeページ

    codeigniterwelcome

  • CodeIgniter3.0.3でMySQL中の1000件程度のテーブルをselectした結果を100件表示するページ。
    CodeIgniterのキャッシュなどは使っていません。キャプチャ画面は加工していますが、こんな感じです。100件のデータがTableで出力されています。

    datalist

  • 静的HTMLファイル。
    この100件表示ページをブラウザで保存したもの。

パフォーマンス計測ツール・条件

  • Apache付属のabコマンドで計測します。(-cオプションは1としています。) こんな感じです。
    ab -n 1000 -c 1 http://127.0.0.1/ci3/public/

  • PHP5.6、PHP7のそれぞれについてopcache ON/OFFにして計測します。

PHP7での動作確認

ざっと動かしただけですが、現在のCodeIgniter3アプリはPHP7でも普通に動作しました
Linux環境以外に、Windows10にもPHP7環境を作って動作させましたが、こちらも動作しました。
(今回のプロジェクトでは大してextensionに依存していません。) mbstringや文字の処理結果など細かい点は未検証です。
1点問題があったのは、Windows 10 + PHP 7でphp_curl.dll を有効にすると、

序数 387 がダイナミック ライブラリ c:\php\ext\php\_curl.dll から見つかりませんでした。 

でApacheが起動しないため、php_curl.dllは外しました。

php_curl_php7

パフォーマンス測定の結果

気になるパフォーマンス測定の結果ですが、abコマンドで計測したRequests per secondの結果は次のようになりました。

どれも向上しています!

  • Requests per second(#/sec) 結果
opcache 表示 PHP 5.6 PHP 7 性能比
opcache OFF Welcomeページ 125.08 155.42 124.30%
100件表示ページ 28.09 38.41 136.70%
opcache ON Welcomeページ 1,131.43 1,575.30 139.20%
100件表示ページ 70.37 117.27 166.60%
  • グラフでの比較

    php7_performance_graph

PHP7は思ったよりも結構なパフォーマンスアップを果たしています。
もちろん、Rasmusさんが語っていたよう、DBアクセスが多いとPHP7でも恩恵は少ないです。

また、静的HTMLのRequests per second結果は7537.37。
いかにPHP7になったと言えど、ワイヤースピードな向上というわけにはいかないですね(^^)。

所感

駆け足での環境整備・パフォーマンス測定だったため、測定条件が良いかはちょっとわかりませんが、目安にはなると思います。

個人的には、ブラウザで閲覧するときに、ん、速くなったかな?と思いました。
気のせいかもしれませんが。 WordPress等はPHP7で随分パフォーマンス向上するらしいのでちょっと楽しみです。

またMySQL5.7も性能向上しているそうなので組み合わせるともっと性能あがるのではないかと思います。
今後、PHP7,MySQL5.7に更新して、スカスカのサーバーをさらにスカスカにできればと思います。

では皆様、よいPHP7 & CodeIgniter年末を!