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
740
1
Share
php-conference-japan-2024
Tasuku Yamashita
December 20, 2024
More Decks by Tasuku Yamashita
See All by Tasuku Yamashita
php-conference-japan-2022
tasuku43
1
2.2k
Other Decks in Programming
See All in Programming
How We Benchmarked Quarkus: Patterns and anti-patterns
hollycummins
1
160
Vibe NLP for Applied NLP
inesmontani
PRO
0
480
Running Swift without an OS
kishikawakatsumi
0
850
ドメインイベントでビジネスロジックを解きほぐす #phpcon_odawara
kajitack
3
800
PHP で mp3 プレイヤーを実装しよう
m3m0r7
PRO
0
290
JAWS-UG横浜 #100 祝・第100回スペシャルAWS は VPC レスの時代へ
maroon1st
0
180
AIベース静的検査器の偽陽性率を抑える工夫3選
orgachem
PRO
4
360
ハーネスエンジニアリングにどう向き合うか 〜ルールファイルを超えて開発プロセスを設計する〜 / How to approach harness engineering
rkaga
24
14k
決定論 vs 確率論:Gemini 3 FlashとTF-IDFを組み合わせた「法規判定エンジン」の構築
shukob
0
110
TiDBのアーキテクチャから学ぶ分散システム入門 〜MySQL互換のNewSQLは何を解決するのか〜 / tidb-architecture-study
dznbk
1
190
Claude CodeでETLジョブ実行テストを自動化してみた
yoshikikasama
0
840
Claude Code × Gemini × Ebitengine ゲーム制作素人WebエンジニアがGoでゲームを作った話
webzawa
0
160
Featured
See All Featured
WENDY [Excerpt]
tessaabrams
10
37k
Jamie Indigo - Trashchat’s Guide to Black Boxes: Technical SEO Tactics for LLMs
techseoconnect
PRO
0
110
Testing 201, or: Great Expectations
jmmastey
46
8.1k
SEO in 2025: How to Prepare for the Future of Search
ipullrank
3
3.4k
Test your architecture with Archunit
thirion
1
2.2k
From π to Pie charts
rasagy
0
170
Rails Girls Zürich Keynote
gr2m
96
14k
The Illustrated Children's Guide to Kubernetes
chrisshort
51
52k
Gemini Prompt Engineering: Practical Techniques for Tangible AI Outcomes
mfonobong
2
380
Fantastic passwords and where to find them - at NoRuKo
philnash
52
3.7k
We Analyzed 250 Million AI Search Results: Here's What I Found
joshbly
1
1.2k
Responsive Adventures: Dirty Tricks From The Dark Corners of Front-End
smashingmag
254
22k
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