WEB/システム/IT技術ブログ

XdebugでPHP処理のボトルネックをプロファイルで調査する

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)」を実行し、先ほどの出力されたファイルをオープンすると、解析結果が表示されます

ビューアは他にもあるのですが、なかなかこれというのが見つからず
今後試してみて、良いものがあれば紹介します

B!

Comment

コメントはありません

コメントする

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

This site uses Akismet to reduce spam. Learn how your comment data is processed.

Monthly Archives