2018/08/13)PHPの性能はバイトコードキャッシュにより数倍向上するのですが、久しぶりにopcacheをキーワードに検索してみると「それほど効果がない」と誤った評価をしているページもあったので、Opcacheによりどのくらい速くなるか簡単なベンチマークをします。Opcacheパッケージ(php-opcache-5.6.17-1.fc23.x86_64)httpdにはサーバー名によって自動的に仮想ホストを切り換える設定がされています。これ以外の変更は特に無く、パッケージ設定以外のチューニング設定を行わないデフォルト設定を利用します。デフォルトページFuelPHPをインストールして最初に表示されるページを利用します。ベンチマークabコマンドを使います。高機能なツールでも良いのですがシンプルイズベストということでabコマンドにします。abコマンドもhttpdサーバーも同じPC上で実行します。Opcache有り/無しで数回実行した結果のうち中間辺りの結果を記載します。request)ベンチマーク結果の評価バイトコードキャッシュの性能を正しく評価するには幾つかのポイントがあります。バイトコードキャッシュはスクリプトのコンパイル結果をキャッシュするコンパイル結果をキャッシュするので2回目以降のリクエストでないと速くなりません。最近のOpcacheはファイルにキャッシュすることができますが、メモリにキャッシュしているとCLI/CGIの場合は速くなりません。Web環境では多数の同時リクエストを想定しなければならないWebアプリを速くしたい=沢山のアクセスがある、という場合が多いと思います。同時リクエスト数とテストで送信するリクエスト数はある程度大きな数字でないと意味のある結果を得られません。10000′′と実行したので同時アクセス数が100、リクエスト総数が10000になり、1クライアントあたり100回リクエストを送信した場合と同等となります。リクエスト/秒のみでなく、レスポンス時間が重要であるPHPはWeb環境で利用される場合がほとんどです。単位時間あたりの処理回数も重要ですが、レスポンス時間もとても重要です。これらのポイントを踏まえ、Opcache有り/無しを比較します。29.329Opecache有りの方がかなり速いことは直ぐわかります。全体の処理時間も約5倍Opcache有りが高速Opcache(APCでも同じ)有りと無しで性能の差が数割程度しかない、ということは普通のWebアプリではありません。一般的に数倍の差が出ます。このテストケースの場合、データベースを利用していないのでデータベースサーバーにアクセスする時間が必要ないのでリクエスト数/処理時間に差が出やすい、と言えます。データベースサーバーを利用している場合でもPHPプログラムが高速に処理できます。これは少ないWebアプリサーバーで多くのユーザーからのリクエストを処理できることを意味します。Opcache無しなら5台のWebサーバーが必要なところが、Opcache有りなら1台のWebサーバーで十分、となるケースは普通にあります。大量のアクセスがないサイトでも「リクエスト開始から完了までの時間が短い=ページ表示が速い」ので意味がない訳ではありません。まとめまれにバイトコードキャッシュが原因でトラブル(動的にスクリプト/データを生成しているのに読み込まれないなど)に巻き込まれることもありますが、バイトコードキャッシュを導入するだけで、数倍PHPスクリプトが速く実行されることを期待できます。動的にスクリプト/データを生成している場合、リフレッシュ期間(キャッシュの有効期限)を指定したり、キャッシュさせない設定も可能です。APCでも十分速くなりますが、現在のPHPのバイトコードキャッシュ標準はOpcacheです。利用していないなら是非利用してみてください。5.6+Opcacheでかなり高速化できることが分かったと思います。PHP7ならどうなるのか?と思うかかも知れません。Opcache無しではほぼ同等の性能でした。PHP7でもOpcacheを入れると数倍高速化されます。不整合が起きてはならない場合、トランザクションはシリアライザブルそもそもエスケープとは何なのか?紹介エレクトロニック・サービス・イニシアチブのWebシステムのコンサルタントのブログです。PHPの開発、PHP4.x/5.xレガシーPHPセキュリティパッチサービスなどを行っています。ブログのサブタイトルを「書かない日記」としているのは、ブログを始めた時にあまり書かないつもりで始めたのでこのサブタイトルになっています。yohgaki@ohgaki.net私が記述したブログ中のコードは記載が無い場合はMITライセンスです。その他のコードは参考リンクなどのライセンス情報を参照ください。