petrknap / profiler
PHP profiler for short-term & long-term profiling
Fund package maintenance!
Other
Requires
- php: >=8.1
- petrknap/optional: ^3.0
Requires (Dev)
- nunomaduro/phpinsights: ^2.11
- petrknap/shorts: ^2.1
- phpstan/phpstan: ^1.12
- phpunit/phpunit: ^10.5
- squizlabs/php_codesniffer: ^3.7
This package is auto-updated.
Last update: 2024-11-19 17:57:06 UTC
README
This tool allows you to monitor performance and detect memory leaks as well as inconsistent performance behavior of your application over time.
Basic profiling
For basic profiling you can use a profiling helper.
The Profiling
will allow you to profile between start
and finish
methods calls.
namespace PetrKnap\Profiler; $profiling = Profiling::start(); // do something $profile = $profiling->finish(); printf('It took %.1f s to do something.', $profile->getDuration());
The Profiling
is simple and cannot be turned on and off easily.
So a profiler was created for the purpose of hard-coded more complex profiling.
Complex profiling
Request a profiler as a dependency and call a profile
method on it.
namespace PetrKnap\Profiler; function doSomething(ProfilerInterface $profiler): string { return $profiler->profile(function (): string { return 'something'; })->process(fn (ProfileInterface $profile) => printf( 'It took %.1f s to do something.', $profile->getDuration(), )); }
How to enable / disable it
It can be easily enabled, or disabled through the DI, which provides either the Profiler
or the NullProfiler
.
namespace PetrKnap\Profiler; echo doSomething(new Profiler()); echo doSomething(new NullProfiler());
Useful features
Take snapshot
If you need to measure the current values, just call the takeSnapshot
method on the Profiling
, or a profiler.
namespace PetrKnap\Profiler; $profiling = Profiling::start(); // do something $profiling->takeSnapshot(); // do something more $profile = $profiling->finish(); printf('There are %d memory usage records.', count($profile->getMemoryUsages()));
If you want to automate it then take snapshot on tick. Or you can use a more practical cascade profiling.
Take snapshot on tick
For greater precision, you can take snapshot on each N
tick.
declare(ticks=2); // this declaration is important (N=2) namespace PetrKnap\Profiler; $profiling = Profiling::start(takeSnapshotOnTick: true); (fn () => 'something')(); $profile = $profiling->finish(); printf('There are %d memory usage records.', count($profile->getMemoryUsages()));
This will result in very detailed code tracking, which can degrade the performance of the monitored application.
Cascade profiling
The profile
method provides you a nested profiler that you can use for more detailed cascade profiling.
namespace PetrKnap\Profiler; $profile = (new Profiler())->profile(function (ProfilerInterface $profiler): void { // do something $profiler->profile(function (): void { // do something more }); }); printf('There are %d memory usage records.', count($profile->getMemoryUsages()));
Run composer require petrknap/profiler
to install it.
You can support this project via donation.
The project is licensed under the terms of the LGPL-3.0-or-later
.