petrknap / php-profiler
PHP profiler for short-term & long-term profiling
Fund package maintenance!
Other
Installs: 95 398
Dependents: 1
Suggesters: 0
Security: 0
Stars: 7
Watchers: 2
Forks: 0
Open Issues: 2
pkg:composer/petrknap/php-profiler
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-10-19 17:50:39 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.