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
Sponsored
·
Your Podcast. Everywhere. Effortlessly.
Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
→
Tasuku Yamashita
December 20, 2024
Programming
760
1
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
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.3k
Other Decks in Programming
See All in Programming
才能?センス?知らん、 続けたもん勝ちだ。-- 結婚・出産・癌を越えてなお、私がプロダクトを創り続ける理由
16bitidol
2
860
AIを活用したE2Eテスト実装効率化のあゆみ / ebisu-mobile-14-kotetu
kotetuco
0
170
ローカルLLMでどこまでコードが書けるか -拡張版 / How much code can be written on a local LLM Extended
kishida
12
4.8k
エンジニア向け会社紹介/Findy Company Profile
findyinc
6
360k
継続モナドとリアクティブプログラミング
yukikurage
3
600
OSINT for SRE: 学術論文とポストモーテムから探る システム障害の共通パターン / SRE NEXT 2026
tomoyk
1
3.8k
任せる範囲はこう広がった / How the Scope of AI Delegation Has Expanded
nrslib
1
260
AWS CDK を「作」ってみた 〜フルスクラッチで見えた CDK の裏側〜 / aws-cdk-from-scratch
gotok365
3
400
ローカルLLMでどこまでコードが書けるか -縮小版 / How much code can be written on a local LLM Shortened
kishida
2
190
SREは、MCPとSRE Agentをこう使え!
kazumax55
0
150
Laravelで学ぶ Webアプリケーションチューニング入門/web_application_tuning_101
hanhan1978
4
560
5分で問診!Composer セキュリティ健康診断
codmoninc
0
270
Featured
See All Featured
ReactJS: Keep Simple. Everything can be a component!
pedronauck
666
130k
Navigating Team Friction
lara
192
16k
The Illustrated Children's Guide to Kubernetes
chrisshort
51
53k
AI: The stuff that nobody shows you
jnunemaker
PRO
8
830
Redefining SEO in the New Era of Traffic Generation
szymonslowik
1
360
The Pragmatic Product Professional
lauravandoore
37
7.4k
End of SEO as We Know It (SMX Advanced Version)
ipullrank
3
4.3k
Discover your Explorer Soul
emna__ayadi
2
1.2k
How to train your dragon (web standard)
notwaldorf
97
6.7k
Navigating Algorithm Shifts & AI Overviews - #SMXNext
aleyda
1
1.4k
Leadership Guide Workshop - DevTernity 2021
reverentgeek
1
320
The Curse of the Amulet
leimatthew05
2
13k
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