Software profiling is a powerful technique when you want to optimize your code. Among other things, a profile snapshot will show you which parts of your software are the slower.
In this article I will explain how to create a profile snapshot for a PHP script.
I assume you are using Ubuntu and you already have PHP installed. Please also install XDebug 3 and KCachegrind:
$ apt install php-xdebug $ apt install kcachegrind
As an example, I will profile tests from jawira/plantuml-encoding.
$ git clone https://github.com/jawira/plantuml-encoding.git $ cd plantuml-encoding $ php tests/vanilla.php
Execute the following command to profile
$ php -dxdebug.mode=profile -dxdebug.output_dir=. tests/vanilla.php
After the execution is finished, a new profile snapshot will be created. This profile file has the following name pattern
xxxxx is a number).
XDebug can be configured in
php.ini. Here we have configured XDebug on-the-fly passing
php.ini configuration through the terminal.
-dxdebug.mode=profile: This option makes
profile modeenabled for this command.
-dxdebug.output_dir=.: Save profile snapshots in current dir "
.", otherwise snapshots are saved in
In our case
profiling mode is ephemeral, but it can be a problem if you are activating profiling by other means (for example directly editing
php.ini file). Profile snapshots can take a LOT of disk space, never leave profile mode permanently enabled.
To visualize your profile snapshot, simply open the snapshot (in our case
cachegrind.out.14476) with KCachegrind.
The reading and interpretation of profiling files are beyond the scope of this article, yet I recommend you to see this video https://www.youtube.com/watch?v=h-0HpCblt3A presenting KCachegrind.
Creating a profile snapshot is easy if you understand how to configure XDebug properly. Using
-d options is very convenient technique to enable profiling from the terminal.