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
570
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.9k
Other Decks in Programming
See All in Programming
XP, Testing and ninja testing
m_seki
3
250
PHPで始める振る舞い駆動開発(Behaviour-Driven Development)
ohmori_yusuke
2
390
データの民主化を支える、透明性のあるデータ利活用への挑戦 2025-06-25 Database Engineering Meetup#7
y_ken
0
360
今ならAmazon ECSのサービス間通信をどう選ぶか / Selection of ECS Interservice Communication 2025
tkikuc
21
4k
The Modern View Layer Rails Deserves: A Vision For 2025 And Beyond @ RailsConf 2025, Philadelphia, PA
marcoroth
1
170
Webの外へ飛び出せ NativePHPが切り拓くPHPの未来
takuyakatsusa
2
550
5つのアンチパターンから学ぶLT設計
narihara
1
170
Hack Claude Code with Claude Code
choplin
4
2.1k
AIと”コードの評価関数”を共有する / Share the "code evaluation function" with AI
euglena1215
1
170
生成AI時代のコンポーネントライブラリの作り方
touyou
1
220
NPOでのDevinの活用
codeforeveryone
0
840
A2A プロトコルを試してみる
azukiazusa1
2
1.4k
Featured
See All Featured
Thoughts on Productivity
jonyablonski
69
4.7k
Building a Scalable Design System with Sketch
lauravandoore
462
33k
Practical Tips for Bootstrapping Information Extraction Pipelines
honnibal
PRO
20
1.3k
Templates, Plugins, & Blocks: Oh My! Creating the theme that thinks of everything
marktimemedia
31
2.4k
Why Our Code Smells
bkeepers
PRO
336
57k
Side Projects
sachag
455
42k
Creating an realtime collaboration tool: Agile Flush - .NET Oxford
marcduiker
30
2.1k
Adopting Sorbet at Scale
ufuk
77
9.5k
CoffeeScript is Beautiful & I Never Want to Write Plain JavaScript Again
sstephenson
161
15k
BBQ
matthewcrist
89
9.7k
RailsConf 2023
tenderlove
30
1.1k
Into the Great Unknown - MozCon
thekraken
40
1.9k
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