PHP 8 パフォーマンスチューニング: OpCacheとJITを解説

Backend2026-09-24TryQuickToolBox

PHP 8アプリケーションが負荷時に遅く感じることはありませんか?クエリを最適化し、キャッシュを追加しても、応答時間がまだ遅いままです。原因はPHP自体の実行オーバーヘッドかもしれません。2つの強力な機能—OpCacheとJIT—は、正しく設定すればコードを劇的に高速化できます。このガイドでは、それらの仕組みと実際のワークロードに合わせたチューニング方法を説明します。

OpCacheとは何か、なぜ重要なのか

PHPはインタプリタ言語です。各リクエストは通常、ソースファイルを解析してバイトコードにコンパイルしてから実行します。OpCacheはそのコンパイル済みバイトコードを共有メモリに保存するため、後続のリクエストは解析とコンパイルをスキップします。その結果、CPU使用率が下がり、応答時間が速くなります。

OpCacheは多くの本番環境でデフォルトで有効になっていますが、デフォルト設定は控えめです。チューニングすることで、CPUバウンドのアプリケーションではスループットが2〜3倍向上する可能性があります。

主要なOpCache設定ディレクティブ

本番環境向け推奨OpCache設定

; php.ini
opcache.enable=1
opcache.memory_consumption=256
opcache.max_accelerated_files=20000
opcache.validate_timestamps=0
opcache.revalidate_freq=0
opcache.interned_strings_buffer=32
opcache.preload=/path/to/preload.php
opcache.preload_user=www-data

設定を変更した後は、PHP-FPMを再起動してください。opcache_get_status()でヒット率とメモリ使用量を監視します。

PHP 8のJITを理解する

JIT(Just-In-Time)コンパイルはOpCacheをさらに一歩進めます。実行時にバイトコードをネイティブマシンコードにコンパイルします。これにより、数学的計算などのCPU集約的なタスクが大幅に高速化される可能性がありますが、I/O(データベース、ファイルシステム、ネットワーク)が支配的な典型的なWebリクエストにはほとんど効果がありません。

JITはOpCacheの一部であるため、まずOpCacheを有効にする必要があります。PHP 8では、JITはopcache.jitとopcache.jit_buffer_sizeで設定します。

JIT設定ディレクティブ

推奨JIT設定

opcache.jit=tracing
opcache.jit_buffer_size=128M

注意: JITはOpCacheが有効な場合にのみ機能します。CLIでは、JITをテストするためにopcache.enable_cli=1を設定する必要があるかもしれません。

OpCache vs JIT: どちらをいつ使うか

機能OpCacheJIT
主な利点コンパイル済みバイトコードをキャッシュバイトコードをネイティブコードにコンパイル
最適な用途すべてのPHPアプリケーションCPU集約的で長時間実行されるスクリプト
I/Oバウンドアプリへの影響高い(解析/コンパイルを削減)低い〜なし
メモリオーバーヘッド中程度追加バッファ
複雑さ低い中程度

ステップバイステップのチューニングガイド

  1. OpCacheを有効化し、上記の推奨設定を適用します。
  2. OpCacheを監視するには、opcache_get_status()またはOpCache GUIなどのツールを使用します。ヒット率99%以上を目指します。
  3. opcache.memory_usageが限界に近い場合はメモリを調整します。
  4. 大規模フレームワーク(Laravel、Symfony)ではプリロードを検討します。頻繁に使用されるクラスをrequireするプリロードスクリプトを作成します。
  5. アプリがCPUバウンドの場合にのみJITを有効化します。JITありとなしでテストして影響を測定します。
  6. ab、wrk、siegeなどのツールを使用してベンチマークを実行します。1秒あたりのリクエスト数とレイテンシを比較します。
  7. 変更を段階的にデプロイし、問題がないかエラーログを監視します。

よくある落とし穴とベストプラクティス

FAQ

JITはすべてのPHPアプリケーションのパフォーマンスを向上させますか?

いいえ。JITは複雑な計算やデータ処理などのCPU集約的なタスクに効果があります。I/OバウンドのWebアプリ(データベースクエリ、API呼び出し)では、効果は最小限です。多くの場合、OpCacheだけで最大の高速化が得られます。

OpCacheが動作しているかどうかを確認するには?

phpinfo()でOpCacheのステータスを確認するか、スクリプトでopcache_get_status()を呼び出します。opcache_enabled => trueと、missesに対して高いhitsカウントを探します。

PHP 7でJITを使用できますか?

いいえ。JITはPHP 8.0で導入されました。PHP 7はOpCacheのみをサポートしています。PHP 7を使用している場合は、OpCacheのチューニングに注力し、JITやその他のパフォーマンス改善のためにPHP 8へのアップグレードを検討してください。

サーバーのパフォーマンスを分析する準備はできましたか?Nginx Log Analyzerをチェックして、アクセスログから洞察を得てボトルネックを特定しましょう。