XdebugでPHPをプロファイリングする
Xdebugのプロファイリングを有効にし、callgrind出力を分析して遅い関数を見つけます
「XdebugでPHPをプロファイリングする」はCoddyKit上の無料PHP Academyレッスンです。 これはレッスン1/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはPHP Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 PHP Academyコースには全4レッスンが含まれています。
Xdebugとは何ですか
Xdebugは、デバッグ、コードカバレッジ、プロファイリングの機能を提供するPHP拡張機能です。プロファイラーは、各関数呼び出しにかかった時間と呼び出し回数を記録します。
Xdebugのインストール
PECLまたはパッケージマネージャーを使用してインストールします。
# Via PECL:
$ pecl install xdebug
# Via apt:
$ apt install php-xdebug
# Verify:
$ php -v | grep Xdebugプロファイラーの有効化
php.iniでXdebugを設定し、プロファイリングを有効にします。
# php.ini
[xdebug]
zend_extension=xdebug.so
xdebug.mode=profile
xdebug.output_dir=/tmp/xdebug
xdebug.profiler_output_name=cachegrind.out.%tトリガーによるプロファイリング
すべてのリクエストをプロファイリングする代わりに、トリガーを使用して必要なときだけプロファイリングします。
# php.ini
xdebug.mode=profile
xdebug.start_with_request=trigger
# Trigger via query parameter or cookie:
curl "https://example.com/?XDEBUG_PROFILE=1"Callgrind出力
Xdebugはcachegrind.out.*ファイルを書き出します。この形式はプロファイリング可視化ツールで読み取れます。
KCachegrind/QCachegrindで分析する
LinuxではKCachegrind、macOS/WindowsではQCachegrindでcallgrindファイルを開くと、関数呼び出し回数、合計時間、自己時間、呼び出しツリーを確認できます。
WebGrindで分析する
WebGrindはブラウザベースのcallgrindビューアーです。デスクトップツールより簡単にセットアップできます。
$ docker run -p 8080:80 jokkedk/webgrind -v /tmp/xdebug:/tmpプロファイラー出力の読み方
「Inclusive Cost」(呼び出し先を含む合計時間)と「Self Cost」(関数本体だけにかかった時間)が最も高い関数を探します。Self Costから実際のボトルネックを特定できます。
よく見つかるボトルネック
典型的な例は、N+1データベースクエリ、非効率な正規表現、重複したAPI呼び出し、最適化されていないEloquentリレーション、コストの高いビューのレンダリングです。
プロファイリングとデバッグの違い
プロファイリングは、時間や呼び出し回数などの性能を測定します。デバッグ(Xdebugの機能の1つ)は、ブレークポイントで実行を一時停止し、コードを調査します。Xdebugでは別々のモードを使用してください。
代替手段としてのBlackfire
Blackfire.ioは、洗練されたUI、CI統合、パフォーマンスアサーションを備えた商用プロファイリングツールです。チーム環境では、生のXdebugプロファイリングよりも推奨されます。
まとめ
php.iniでXdebugのプロファイラーモードを有効にし、リクエストをトリガーして、KCachegrindまたはWebGrindでcallgrindファイルを開きます。ボトルネックを見つけるには、Inclusive CostとSelf Costが最も高い関数に注目します。
理解度チェック
プロファイラーレポートにおける「Self Cost」とは何を意味しますか。
よくある質問
「XdebugでPHPをプロファイリングする」レッスンは無料ですか?
はい。「XdebugでPHPをプロファイリングする」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、PHP Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 PHP Academyコースには全4レッスンが含まれています。
「XdebugでPHPをプロファイリングする」で何を学びますか?
Xdebugのプロファイリングを有効にし、callgrind出力を分析して遅い関数を見つけます ブラウザで直接実行するハンズオンコードでPHP Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。
PHP Academyを始めるのに経験は必要ですか?
事前経験は必要ありません。CoddyKitのPHP Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン1/4です。
「XdebugでPHPをプロファイリングする」レッスンにはどのくらい時間がかかりますか?
ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。
このPHP Academyレッスンでコードを書いて実行できますか?
はい。すべてのPHP Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。
このコースのすべてのレッスン
- XdebugでPHPをプロファイリングする
- OPcache:バイトコードキャッシュ
- データベースクエリの最適化
- メモリ管理とパフォーマンスのヒント