PHP処理のボトルネックをプロファイルで調査します
今回は、Docker環境でXdebugのProfiling機能を使った検証です
Xdebug: Documentation » Profiling
環境の詳細は以下の通り
- Windows 11 Home 64bit
- Docker Desktop
- PHP 8.2.28
- Xdebug v3.4.2
既に、任意のPHPプロジェクトをDockerで開発していることを前提とします
Xdebug 2では設定が異なるので注意が必要です。今回はXdebug 3です
Xdebugのインストール
Docker環境にXdebugをインストールします
php.iniに以下の設定を追加します
[xdebug] xdebug.mode=profile xdebug.start_with_request=yes xdebug.profiler_output_name=cachegrind.out.%t-%s xdebug.output_dir=tmp/xdebug
profiler_output_nameでプロファイル結果のファイル名を指定します
ファイルが多くなると、どの処理かわからなくなるので、
ドキュメントを参考にして必要に応じて設定します
https://xdebug.org/docs/all_settings#trace_output_name
output_dirでは、プロファイルが出力されるディレクトリを指定します
ここで、ディレクトリが存在しないと、プロファイルが出力されないので、注意が必要です
公開ディレクトリからの相対パスとなっているので、例えばドキュメントルートが「/var/www/html」の場合、事前にフォルダ「/var/www/html/tmp/xdebug」を作成しておく必要があります
次に、Dockerfileに以下を追記して、コンテナ起動時に必要に応じてXdebugをインストールします
RUN bash -c '[[ -n "$(pecl list | grep xdebug)" ]]\ || (pecl install xdebug && docker-php-ext-enable xdebug)'
コンテナを起動して、以下のコマンドでXdebugがインストールされているかどうか確認します
# php -v PHP 8.2.28 (cli) (built: Mar 17 2025 23:21:38) (NTS) Copyright (c) The PHP Group Zend Engine v4.2.28, Copyright (c) Zend Technologies with Xdebug v3.4.2, Copyright (c) 2002-2025, by Derick Rethans
プロファイルを確認
先ほど設定したコンテナを起動し、ブラウザでアクセスすると、プロファイル「/var/www/html/tmp/xdebug/cachegrind.out.xxxxxxxxxx-_xxx_xxx_xxx_php.gz」が出力されているはずです
プロファイル自体のコードを、そのまま読み込むのは困難です
一般的には専用のビューアを使ってプロファイルを確認します
PHP Profiler
PHP Profilerはvscodeの拡張機能です
PHP プロファイラー – Visual Studio マーケットプレイス
私はvscodeユーザなので、これが使えると便利なのですが、プロファイルのサイズが大きい場合には、そこそこオープンするのに時間がかかります
vscodeのコマンドで「PHP Profiler: Open Profile File (Xdebug Profilling Output)」を実行し、先ほどの出力されたファイルをオープンすると、解析結果が表示されます
ビューアは他にもあるのですが、なかなかこれというのが見つからず
今後試してみて、良いものがあれば紹介します
コメントする