Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
php-conference-japan-2024
Search
Tasuku Yamashita
December 20, 2024
Programming
0
510
php-conference-japan-2024
Tasuku Yamashita
December 20, 2024
Tweet
Share
More Decks by Tasuku Yamashita
See All by Tasuku Yamashita
php-conference-japan-2022
tasuku43
1
1.8k
Other Decks in Programming
See All in Programming
Unlock the Potential of Swift Code Generation
rockname
0
260
Vibe Coding の話をしよう
schroneko
10
2.6k
SEAL - Dive into the sea of search engines - Symfony Live Berlin 2025
alexanderschranz
1
140
スモールスタートで始めるためのLambda×モノリス(Lambdalith)
akihisaikeda
2
290
Java 24まとめ / Java 24 summary
kishida
3
500
On-the-fly Suggestions of Rewriting Method Deprecations
ohbarye
1
2.9k
新しいPHP拡張モジュールインストール方法「PHP Installer for Extensions (PIE)」を使ってみよう!
cocoeyes02
0
410
サービスレベルを管理してアジャイルを加速しよう!! / slm-accelerate-agility
tomoyakitaura
1
180
The Nature of Complexity in John Ousterhout’s Philosophy of Software Design
philipschwarz
PRO
0
120
リストビュー画面UX改善の振り返り
splcywolf
0
150
API for docs
soutaro
2
1.4k
Building a macOS screen saver with Kotlin (Android Makers 2025)
zsmb
1
160
Featured
See All Featured
Fantastic passwords and where to find them - at NoRuKo
philnash
51
3.1k
YesSQL, Process and Tooling at Scale
rocio
172
14k
Writing Fast Ruby
sferik
628
61k
Testing 201, or: Great Expectations
jmmastey
42
7.5k
Making the Leap to Tech Lead
cromwellryan
133
9.2k
KATA
mclloyd
29
14k
Adopting Sorbet at Scale
ufuk
76
9.3k
Learning to Love Humans: Emotional Interface Design
aarron
273
40k
RailsConf 2023
tenderlove
30
1.1k
Side Projects
sachag
452
42k
Product Roadmaps are Hard
iamctodd
PRO
52
11k
[RailsConf 2023 Opening Keynote] The Magic of Rails
eileencodes
29
9.4k
Transcript
Xdebug Profileによる CIパフォーマンス改善のためのボトルネック解析 山下 祐 2024年12月22日
自己紹介 2 • 名前: 山下 祐 (Yamashita Tasuku) • 所属:
株式会社kubell(旧Chatwork株式会社) ◦ 2019年12月~ PHPエンジニアとして入社 ◦ 現在は認証チームでバックエンドを中心に活動中 • SNS: ◦ GitHub: tasuku43 ◦ Twitter: task2021 ◦ Zenn: https://zenn.dev/tasteck
目次 CONTENTS 01 | 解決したい課題 02 | Xdebug Profileとは? 03
| Xdebug Profileの使い方 04 | GitHub Actionsで実行する 05 | まとめ
目次 CONTENTS 01 | 解決したい課題 02 | Xdebug Profileとは? 03
| Xdebug Profileの使い方 04 | GitHub Actionsで実行する 05 | まとめ
解決したい課題 • ある日、CIのテストジョブが通常の4分から10分に急激に遅延しました • テスト結果の詳細を分析したところ、特定のテストケースが遅いわけではな く、全体の約半分がわずかに遅くなっている ことが判明しました 5
解決したい課題 6 個々のテストケースの実行結果(時間)を見るだけでは、どこがボトルネックに なっているのか特定することは難しい SetUp処理で呼ばれている? 多くのテストケースが存在する? まだ何もわからないけ ど、これを見つけたい
目次 CONTENTS 01 | 解決したい課題 02 | Xdebug Profileとは? 03
| Xdebug Profileの使い方 04 | GitHub Actionsで実行する 05 | まとめ
Xdebug Profileとは? 8 • Xdebugのプロファイラ機能 ◦ PHPスクリプトの実行パフォーマンスを分析するための強力なツール ◦ スクリプトや関数の実行時間を集計し、プロファイリングデータとして保 存
目次 CONTENTS 01 | 解決したい課題 02 | Xdebug Profileとは? 03
| Xdebug Profileの使い方 04 | GitHub Actionsで実行する 05 | まとめ
Xdebug Profileの使い方 10 • PHPUnitを実行するときにプロファイルモードを有効にするだけです ◦ Xdebugがインストール済みである必要あり • ポイント ◦
xdebug.modeでプロファイルモードに指定します ◦ xdebug.output_dirで出力先を決めます ステップ実行時は debugモードで動かしています
プロファイリングから解析までの流れ 11
プロファイリングから解析までの流れ 12 プロファイル結果ファイルの出 力先を作成しておきます
プロファイリングから解析までの流れ 13 -dオプションは、PHPの設定ディレクティブ (php.iniで定義される設定項目)を一時的に変 更するためのもの
プロファイリングから解析までの流れ 14 xdebugのインストール時に、環境にzlibライブラリが有 効な場合は、Zlib圧縮サポートが有効になるため、gz形 式で出力されます。
プロファイリングから解析までの流れ 15 • PhpStorm > Tools > Analyze Xdebug Profiler
Snapshot…を選択 • 出力されたCachegrind形式のプロファイル結果ファイルを選択 ◦ gz形式であってもそのまま開くことが可能です
プロファイリングから解析までの流れ 16 プロセス全体での呼び出し回数 メソッドや関数単体での 実行時間 PHPプロセス全体での トータル実行時間 と割合
プロファイリングから解析までの流れ 17 ポイント①: テストフレームワーク関連のデータは無視する
プロファイリングから解析までの流れ 18 ポイント②: プロセス全体の実行時間に対する割合に着目する
プロファイリングから解析までの流れ 19 ポイント③: 怪しい処理をどんどんブレークダウンしていく (先ほどチラッと見えていた所 はあえて無視して) ①Timeが大きい処理を選択 すると... ②コールツリーが 表示されます
③さらにその中で割 合の大きいものを探 します
プロファイリングから解析までの流れ 20 「無駄に遅い処理」というメソッドの中で「無意味なスリープ」というメソッドを1500 回も呼び出している事が明らかに 核心に迫るまでひた すらブレークダウン おそらく実際は、HTTP通信やDBアクセスなどの外部通信などが見つかる事も 多いのではないかと思います
目次 CONTENTS 01 | 解決したい課題 02 | Xdebug Profileとは? 03
| Xdebug Profileの使い方 04 | GitHub Actionsで実行する 05 | まとめ
GitHub Actionsで実行する 22 出力先のディレクトリを作成して、実 行 手動で実行できるようにすることで、誰でも同じ環境で テストのプロファイリングを簡単に実行できるように
GitHub Actionsで実行する 23 長期的に保存したい場合は、 Artifactでは なく、他のストレージサービス(例えば AWS S3など)の利用をお勧めします
独自のDocker Imageで動かしている場合は... 24 出力データ量を抑える為、ZIP拡張が有 効であることを確認してください。コスト削 減に繋がります。
目次 CONTENTS 01 | 解決したい課題 02 | Xdebug Profileとは? 03
| Xdebug Profileの使い方 04 | GitHub Actionsで実行する 05 | まとめ
まとめ 26 今回はボトルネックの特定をテーマにお話しましたが、現状課題が なくてもプロファイル結果を確認するだけで発見があり面白いの で、ぜひ試してみてください!
働くをもっと楽しく、創造的に 27