Link
Embed
Share
Beginning
This slide
Copy link URL
Copy link URL
Copy iframe embed code
Copy iframe embed code
Copy javascript embed code
Copy javascript embed code
Share
Tweet
Share
Tweet
Slide 1
Slide 1 text
Xdebug Profileによる CIパフォーマンス改善のためのボトルネック解析 山下 祐 2024年12月22日
Slide 2
Slide 2 text
自己紹介 2 ● 名前: 山下 祐 (Yamashita Tasuku) ● 所属: 株式会社kubell(旧Chatwork株式会社) ○ 2019年12月~ PHPエンジニアとして入社 ○ 現在は認証チームでバックエンドを中心に活動中 ● SNS: ○ GitHub: tasuku43 ○ Twitter: task2021 ○ Zenn: https://zenn.dev/tasteck
Slide 3
Slide 3 text
🙇いきなりのお詫び🙇 3 ● 5分で喋りきるのが相当厳しい戦いになりそうなので、早口で聞き取りづら かったらすいません🙇 ● forteeにスライドをアップしているため、お手元でも見ていただけると嬉しい です!
Slide 4
Slide 4 text
目次 CONTENTS 01 | 解決したい課題 02 | Xdebug Profileとは? 03 | Xdebug Profileの使い方 04 | GitHub Actionsで実行する 05 | まとめ
Slide 5
Slide 5 text
目次 CONTENTS 01 | 解決したい課題 02 | Xdebug Profileとは? 03 | Xdebug Profileの使い方 04 | GitHub Actionsで実行する 05 | まとめ
Slide 6
Slide 6 text
解決したい課題 ● ある日、GitHub Actionsで実行されているテストジョブが通常の4分から10 分に急激に遅延しました ● テスト結果の詳細を分析したところ、特定のテストケースが遅いわけではな く、全体の約半分がわずかに遅くなっている ことが判明しました 6
Slide 7
Slide 7 text
解決したい課題 7 個々のテストケースの実行結果(時間)を見るだけでは、どこがボトルネックに なっているのか特定することは難しい SetUp処理で呼ばれている? 多くのテストケースが存在する? まだ何もわからないけ ど、これを見つけたい
Slide 8
Slide 8 text
目次 CONTENTS 01 | 解決したい課題 02 | Xdebug Profileとは? 03 | Xdebug Profileの使い方 04 | GitHub Actionsで実行する 05 | まとめ
Slide 9
Slide 9 text
Xdebug Profileとは? 9 ● Xdebugのプロファイラ機能 ○ PHPスクリプトの実行パフォーマンスを分析するための強力なツール ○ スクリプトや関数の実行時間を集計し、プロファイリングデータとして保 存
Slide 10
Slide 10 text
目次 CONTENTS 01 | 解決したい課題 02 | Xdebug Profileとは? 03 | Xdebug Profileの使い方 04 | GitHub Actionsで実行する 05 | まとめ
Slide 11
Slide 11 text
Xdebug Profileの使い方 11 ● PHPUnitを実行するときにプロファイルモードを有効にするだけです ○ Xdebugがインストール済みである必要あり ● ポイント ○ xdebug.modeでプロファイルモードに指定します ○ xdebug.output_dirで出力先を決めます ステップ実行時は debugモードで動かしています
Slide 12
Slide 12 text
プロファイリングから解析までの流れ 12
Slide 13
Slide 13 text
プロファイリングから解析までの流れ 13 プロファイル結果ファイルの出 力先を作成しておきます
Slide 14
Slide 14 text
プロファイリングから解析までの流れ 14 -dオプションは、PHPの設定ディレクティブ (php.iniで定義される設定項目)を一時的に変 更するためのもの
Slide 15
Slide 15 text
プロファイリングから解析までの流れ 15 xdebugのインストール時に、環境にzlibライブラリが有 効な場合は、Zlib圧縮サポートが有効になるため、gz形 式で出力されます。
Slide 16
Slide 16 text
プロファイリングから解析までの流れ 16 ● PhpStorm > Tools > Analyze Xdebug Profiler Snapshot…を選択 ● 出力されたCachegrind形式のプロファイル結果ファイルを選択 ○ gz形式であってもそのまま開くことが可能です
Slide 17
Slide 17 text
プロファイリングから解析までの流れ 17 プロセス全体での呼び出し回数 メソッドや関数単体での 実行時間 PHPプロセス全体での トータル実行時間 と割合
Slide 18
Slide 18 text
プロファイリングから解析までの流れ 18 ポイント①: テストフレームワーク関連のデータは無視する
Slide 19
Slide 19 text
プロファイリングから解析までの流れ 19 ポイント②: プロセス全体の実行時間に対する割合に着目する
Slide 20
Slide 20 text
プロファイリングから解析までの流れ 20 ポイント③: 怪しい処理をどんどんブレークダウンしていく (先ほどチラッと見えていた所 はあえて無視して) ①Timeが大きい処理を選択 すると... ②コールツリーが 表示されます ③さらにその中で割 合の大きいものを探 します
Slide 21
Slide 21 text
プロファイリングから解析までの流れ 21 「無駄に遅い処理」というメソッドの中で「無意味なスリープ」というメソッドを1500 回も呼び出している事が明らかに 核心に迫るまでひた すらブレークダウン おそらく実際は、HTTP通信やDBアクセスなどの外部通信などが見つかる事も 多いのではないかと思います
Slide 22
Slide 22 text
目次 CONTENTS 01 | 解決したい課題 02 | Xdebug Profileとは? 03 | Xdebug Profileの使い方 04 | GitHub Actionsで実行する 05 | まとめ
Slide 23
Slide 23 text
GitHub Actionsで実行する 23 出力先のディレクトリを作成して、実 行 手動で実行できるようにすることで、誰でも同じ環境で テストのプロファイリングを簡単に実行できるように
Slide 24
Slide 24 text
GitHub Actionsで実行する 24 長期的に保存したい場合は、 Artifactでは なく、他のストレージサービス(例えば AWS S3など)の利用をお勧めします
Slide 25
Slide 25 text
独自のDocker Imageで動かしている場合は... 25 出力データ量を抑える為、ZIP拡張が有 効であることを確認してください。コスト削 減に繋がります。
Slide 26
Slide 26 text
目次 CONTENTS 01 | 解決したい課題 02 | Xdebug Profileとは? 03 | Xdebug Profileの使い方 04 | GitHub Actionsで実行する 05 | まとめ
Slide 27
Slide 27 text
まとめ 27 今回はボトルネックの特定をテーマにお話しましたが、現状課題が なくてもプロファイル結果を確認するだけで発見があり面白いの で、ぜひ試してみてください!
Slide 28
Slide 28 text
働くをもっと楽しく、創造的に 28