2021-09-28 PHPUnit の始め方について語りあう PHP TechCafe での LT スライド
https://rakus.connpass.com/event/223536/presentation/
PHP でプロファイリングしてみた2021年09月28日 PHP TechCafe株式会社ラクス 坂田1
View Slide
自己紹介名前:坂田晃平所属:株式会社ラクス仕事:チャットディーラーの開発Laravel 使ってます型宣言はきっちり書きたい派2
プログラムのプロファイリング性能分析ともいうプログラム実行時の各種情報を収集関数呼び出しの頻度関数評価にかかる時間そのためのツールをプロファイラというPHP では Xdebug をプロファイラとして使えるhttps://ja.wikipedia.org/wiki/性能解析3
PHP でやってみた1. Xdebug の設定2. プログラムを実行3. 結果の確認4
やってみた - 1. Xdebug の設定php.ini[Zend]zend_extension=/path/to/xdebug.soxdebug.mode=profilexdebug.output_dir=/tmp/xdebug # default: /tmphttps://xdebug.org/docs/profilerhttps://www.keicode.com/cgi/profile-with-xdebug.php5
やってみた - 2. プログラムを実行ブラウザからリクエストを送って実行コマンドライン実行どちらでも可能だが、今回やってみたのは後者コマンドラインから処理を呼び出せるようにしておくと、こういうとき便利6
サンプルプログラム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
やってみた - 2. プログラムを実行[[email protected] sample]$ php artisan sample:runstart light processstart heavy processxdebug.output_dir で指定したディレクトリにファイルができる[[email protected] sample]$ ls /tmp/xdebug/cachegrind.out.2090218
やってみた - 3. 結果の確認プロファイラの出力はそのままでは読めないversion: 1creator: xdebug 3.0.4 (PHP 8.0.8)cmd: /home/user/sample/artisanpart: 1positions: lineevents: Time_(10ns) Memory_(bytes)fl=(1) php:internalfn=(1) php::microtime9
cfl=(75)cfn=(230)calls=1 0 037 119242 107888cfl=(60)cfn=(3784)calls=1 0 037 3518754656 14415552cfl=(60)cfn=(3786)calls=1 0 051 1047 0summary: 3520990750 18356232333,982 行あった10
やってみた - 3. 結果の確認見やすく表示してくれるツールを使うXdebug のホームページでは KCacheGrind が紹介されていた(グラフィカルに表示してくれる)PhpStorm でも可能(すでに使っているのならこれが手軽)https://kcachegrind.github.io/html/Home.htmlhttp://bashalog.c-brains.jp/12/11/08-095736.php11
やってみた - 3. 結果の確認1. サーバーから出力ファイルをダウンロード2. PhpStorm で開くTools > Analyze Xdebug ProfilerSnapshot...12
13
やってみた - 3. 結果の確認関数呼び出しの頻度と総所要時間がわかる⇒ 性能のボトルネック箇所がわかるe.g,SampleService::heavyProcess はコマンド実行で 1 回呼び出され、実行に 30 秒かかるやばい14
まとめPHP プログラムのプロファイリングの道具はすでにそろっているプロファイルを取るとパフォーマンスチューニングができる環境情報PHP 8.0.8Xdebug v3.0.4Laravel 8.54PhpStorm 2020.3.315