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
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
変わらないものが、変わるものを決める — 意図駆動開発 × イベントソーシング × イミュータブル | What Doesn't Change Decides What Can — IDD × Event Sourcing × Immutability
tomohisa
0
900
yield再入門 #phpcon
o0h
PRO
0
850
OpenSpecのproposalにbrainstormingを持たせてみた
tigertora7571
1
160
20260722_microCMSで考える、AI時代のコンテンツ運用設計
yosh1
0
190
Claude Team Plan導入・ガイド
tk3fftk
0
250
Embedded SREと共に達成した会員管理システムのAWS移行 - SRE NEXT 2026 ランチスポンサーセッション
niftycorp
PRO
1
3.3k
これって Effect でできたのでは? / TSKaigi Mashup Kansai #2
susisu
0
130
PHP Application における Kubernetes 内 gRPC 通信
ganchiku
0
570
ルールを書いて終わらせないハーネスエンジニアリング
yug1224
4
1.8k
광주소프트웨어마이스터고등학교 DevFest 특강 - 바이브 코딩 시대에서 주니어 개발자로 살아남는 방법
utilforever
1
160
「寝てても仕事が進む」Claude Codeで組む第二の脳
tomoyafujita2016
0
240
AWS CDK を「作」ってみた 〜フルスクラッチで見えた CDK の裏側〜 / aws-cdk-from-scratch
gotok365
3
2.7k
Featured
See All Featured
Bioeconomy Workshop: Dr. Julius Ecuru, Opportunities for a Bioeconomy in West Africa
akademiya2063
PRO
1
190
Responsive Adventures: Dirty Tricks From The Dark Corners of Front-End
smashingmag
254
22k
We Analyzed 250 Million AI Search Results: Here's What I Found
joshbly
1
1.7k
Joys of Absence: A Defence of Solitary Play
codingconduct
1
420
I Don’t Have Time: Getting Over the Fear to Launch Your Podcast
jcasabona
34
2.8k
How to Create Impact in a Changing Tech Landscape [PerfNow 2023]
tammyeverts
56
3.4k
Site-Speed That Sticks
csswizardry
13
1.4k
AI Search: Implications for SEO and How to Move Forward - #ShenzhenSEOConference
aleyda
1
1.3k
Mind Mapping
helmedeiros
PRO
1
290
The Anti-SEO Checklist Checklist. Pubcon Cyber Week
ryanjones
0
190
Highjacked: Video Game Concept Design
rkendrick25
PRO
1
420
Lightning Talk: Beautiful Slides for Beginners
inesmontani
PRO
2
620
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