Upgrade to Pro — share decks privately, control downloads, hide ads and more …

PHP でプロファイリングしてみた

坂田晃平
September 28, 2021

PHP でプロファイリングしてみた

2021-09-28 PHPUnit の始め方について語りあう PHP TechCafe での LT スライド

https://rakus.connpass.com/event/223536/presentation/

坂田晃平

September 28, 2021
Tweet

More Decks by 坂田晃平

Other Decks in Programming

Transcript

  1. やってみた - 1. Xdebug の設定 php.ini [Zend] zend_extension=/path/to/xdebug.so xdebug.mode=profile xdebug.output_dir=/tmp/xdebug

    # default: /tmp https://xdebug.org/docs/profiler https://www.keicode.com/cgi/profile-with-xdebug.php 5
  2. サンプルプログラム class RunSample extends \Illuminate\Console\Command { protected $signature = 'sample:run';

    protected $description = "Laravel の Artisan コマンドで Service クラスの処理を実行できるようにしたもの"; public function handle(\App\Services\SampleService $service): int { $this->line('start light process'); $service->lightProcess(); $this->line('start heavy process'); $service->heavyProcess(); return 0; } } 7
  3. やってみた - 2. プログラムを実行 [user@host sample]$ php artisan sample:run start

    light process start heavy process xdebug.output_dir で指定したディレクトリにファイルができる [user@host sample]$ ls /tmp/xdebug/ cachegrind.out.209021 8
  4. やってみた - 3. 結果の確認 プロファイラの出力はそのままでは読めない version: 1 creator: xdebug 3.0.4

    (PHP 8.0.8) cmd: /home/user/sample/artisan part: 1 positions: line events: Time_(10ns) Memory_(bytes) fl=(1) php:internal fn=(1) php::microtime 9
  5. cfl=(75) cfn=(230) calls=1 0 0 37 119242 107888 cfl=(60) cfn=(3784)

    calls=1 0 0 37 3518754656 14415552 cfl=(60) cfn=(3786) calls=1 0 0 51 1047 0 summary: 3520990750 18356232 333,982 行あった 10
  6. やってみた - 3. 結果の確認 見やすく表示してくれるツールを使う Xdebug のホームページでは KCacheGrind が紹介されていた (グラフィカルに表示してくれる)

    PhpStorm でも可能 (すでに使っているのならこれが手軽) https://kcachegrind.github.io/html/Home.html http://bashalog.c-brains.jp/12/11/08-095736.php 11
  7. 13