Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
Improvement with xhprof and php-quick-profiler
Search
tsuyoshi nakamura
February 17, 2017
Technology
140
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Improvement with xhprof and php-quick-profiler
tsuyoshi nakamura
February 17, 2017
More Decks by tsuyoshi nakamura
See All by tsuyoshi nakamura
社内の勉強会で発表した_output_一部抜粋版_.pdf
tsuyoshi
0
510
PHPを少しでも早く_条件はあるよ_.pdf
tsuyoshi
0
91
スタートアップ6年目のレビュー文化.pdf
tsuyoshi
1
2k
PHPを少し深堀るよ.pdf
tsuyoshi
0
410
Reactive_Manifesto.pdf
tsuyoshi
0
96
About_Resilience.pdf
tsuyoshi
1
110
エンジニアの循環ってgood_or_bad_.pdf
tsuyoshi
0
1.3k
スタートアップしてからの失敗の数々
tsuyoshi
0
2.5k
スタートアップエンジニアの役割
tsuyoshi
0
560
Other Decks in Technology
See All in Technology
GitHub Agentic Workflows を触ってみる
htkym
2
910
AI 時代の Azure エンジニアリング ~ 私たちは何を磨き、何を任せるのか ~
chack411
1
280
Execution in the Kingdom of Agents: Reflections on Abstraction and Complexity
bcantrill
0
640
Incremental HTTP
kazuho
5
1.9k
AWS DevOps Agent スキルをつかいこなそう / Master AWS DevOps Agent Skills
kinunori
2
650
TiDBファミリーにDWHが新登場!! TiDB最新情報 / TiDB update 202609
yoshiakiyamasaki
0
180
人にやさしく、AIにやさしく、書き手を選ばないIaCのガードレール再考 / Rethinking IaC Guardrails for Humans and AI Alike
kohbis
5
2k
Oracle Cloud Infrastructure(OCI):Onboarding Session(はじめてのOCI/Oracle Supportご利⽤ガイド)
oracle4engineer
PRO
3
21k
インバスケット試験対策アプリを 作って見えたAIエージェント構築 ナレッジ2選
shichijoyuhi
1
110
「大丈夫そう?」をObservabilityで確かめる
mrmtsu
0
250
AI感のないAWS構成図をAIエージェントに描かせたい!
sagochiko
2
490
[2026 Oracle Technical Deep Dive] AI時代のデータベース基盤をどう選ぶ? Exadata Database Serviceの選択肢と使い分け (2026年9月17日開催)
oracle4engineer
PRO
0
150
Featured
See All Featured
New Earth Scene 8
popppiees
4
2.6k
Exploring anti-patterns in Rails
aemeredith
4
520
Kristin Tynski - Automating Marketing Tasks With AI
techseoconnect
PRO
0
530
Lessons Learnt from Crawling 1000+ Websites
charlesmeaden
PRO
1
1.6k
How Fast Is Fast Enough? [PerfNow 2025]
tammyeverts
3
910
Reality Check: Gamification 10 Years Later
codingconduct
0
2.3k
Data-driven link building: lessons from a $708K investment (BrightonSEO talk)
szymonslowik
1
1.3k
A better future with KSS
kneath
240
18k
Keith and Marios Guide to Fast Websites
keithpitt
413
23k
実際に使うSQLの書き方 徹底解説 / pgcon21j-tutorial
soudai
PRO
203
76k
Color Theory Basics | Prateek | Gurzu
gurzu
1
480
Highjacked: Video Game Concept Design
rkendrick25
PRO
1
470
Transcript
Improvement with xhprof and php-quick-profiler 2017.02.17 社内勉強会 @nakamura_tsuyo4
Agenda 経緯 調査するに至った経緯 使ったツール 調査する時に使ったツールや設定 等 調査〜結果〜考案 調査結果から考えられる原因や改 善策など 対策
最終的にどんな施策を行ったか 結果 行った施策がどうだったかの評価 まとめ 振り返って見てどこが良かったか、 まだ改善の余地はあるか等
経緯 ▪ ガイア砲ショック 当時の対応はホント泣けた ▪ あらゆる面を改善していかなきゃいかん ▪ PHPのPerformanceが低すぎる問題を少し手をつけるか ▪ `pmap`コマンドからサーバで動いているプロセスのメモリマッピングを見
せて貰った ▫ `anon`=匿名メモリが多かった ▫ php-fpmの再起動直後と数日運用してからの`pmap`の結果から やっぱり`anon`=php側でメモリを多くくってるなぁーと分かった ▪ PHP5.6に最近したし、FWもFPMもnginxも比較的新しいし、自分たちで 作ったどこかの処理が原因なんだろうなー ▪ 時間取って向き合うと決める 非公開 非公開
▪ Newrelic使ってるけどFuel対応してなくて詳細が見えない ▪ 色々ググりながら試行錯誤 ▪ `xhprof`と`php-quick-profiler`の2つを使って行くことが良さげ ▪ `xhprof`はpeclからinstall 使ったtool xhprof
php-quick -profiler
xhprof ▪ `xhprof`はpeclからinstall ▪ Php-fpmのconfigで有効化 ▫ /etc/php.d/xhprof.ini -> ▫ xhprofのweb設定------>
▪ public/index.phpの改修----> [xhprof] extension=xhprof.so xhprof.output_dir="/var/log/xhpro" Cp -a /usr/share/pear/xhprof_lib /user/local/nginx/xhprof/ (http公開領域) Cp -a /usr/share/pear/xhprof_html /user/local/nginx/xhprof/ (http公開領域) if (function_exists('xhprof_enable')) { xhprof_enable(); } // Boot the app... require APPPATH.'bootstrap.php';
php-quick-profiler ▪ 元々fuelphpではconfigの変更だけで利用可 ▫ config/db.php ----------------> 'profiling' => true,
other ▪ Xhgui ▫ うまくinstallできず断念
Profiling Performance ・php-quick-profiler ・xhprof
Result - php-quick-profiler ▪ どの画面を表示しての定常的にMemory Usedが大きい... ▫ アクセスの度に動く共通ロジックの中が怪しいなぁ 非公開
Result - xhprof ▪ 一番重い赤の部分を発見 ▫ でもFWのcore部分で改修するにも影響範囲がデカイ ▪ その手間=赤マル部分で毎度通過するメソッドを発見 ▫
Coreクラスを継承している子クラスが動いてた
Result - xhprof ▪ 前のページの赤マルで囲った処理はEWall%でソートしても上位にあがる ▫ 改善すると効果高いかも ▪ `preg_match`関数も重い 非公開
非公開
Coreに手をつけるのは最終手段 影響範囲も大きくなってリリースまでのリードタイム も長くなる。そもそももっと出来ることがあるはず だ!! 対応方針 2つ 共通ロジック箇所を見直す アクセスの度に稼働するロジックを見直すと当然 効果が高いし、全体的に PHP遅い評価だったの
で見直すべき所はこの辺だなー
対応 -1- ▪ アクセスの度に動くAgent classの見直し ▫ xhprofの指摘箇所 ▫ Coreクラスのextendを止めた ▫
親クラスのmethodを使ってないし ▫ FWの仕様でAutoloader設定されているAgentクラスは親クラスを辿 り_initが毎回自動で走るようになってた ▪ 使って無いのに無駄に動いている
対応 -2- ▪ `preg_match`関数でなくても良い箇所は`strpos`に置き換えた ▫ xhprof指摘箇所 ▫ 公式より ▫ Tip
Do not use preg_match() if you only want to check if one string is contained in another string. Use strpos() instead as it will be faster.
対応 -3- ▪ Cookieの活用 ▫ どうしても`preg_match`を使わなければいけない場面はあるので cookieを活用して`preg_match`の利用頻度を下げた
結果
結果
結果
結果
まとめ ▪ Agent Classの改修が結果的に一番効果あった ▪ Coreクラスの部分を除外して考えた事でリリースまでの リードタイム短縮になって結果良かった ▪ 絶対に改善するぜという心意気重要!! ▪
そこまで難しいツールで無かったのでもっと早くやれば良 かったという結果論 ▪ 定常的に見える化するとよりよいなぁ ▫ チームで改善ができる
THANKS! Any questions?