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
Improvement with xhprof and php-quick-profiler
Search
Sponsored
·
SiteGround - Reliable hosting with speed, security, and support you can count on.
→
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
500
PHPを少しでも早く_条件はあるよ_.pdf
tsuyoshi
0
87
スタートアップ6年目のレビュー文化.pdf
tsuyoshi
1
2k
PHPを少し深堀るよ.pdf
tsuyoshi
0
400
Reactive_Manifesto.pdf
tsuyoshi
0
90
About_Resilience.pdf
tsuyoshi
1
96
エンジニアの循環ってgood_or_bad_.pdf
tsuyoshi
0
1.3k
スタートアップしてからの失敗の数々
tsuyoshi
0
2.5k
スタートアップエンジニアの役割
tsuyoshi
0
550
Other Decks in Technology
See All in Technology
デジタル・デザイン:次の50年を描く「進化する青写真」
y150saya
0
800
RAGの精度向上とエージェント活用
kintotechdev
2
130
デジタル・デザイン構想 by Sayaka Ishizuka
y150saya
0
190
Claude Codeとハーネスについて考えてみる
oikon48
17
8k
AIに「使われる」時代のSaaS戦略 〜既存WebAPIのMCPサーバー化における開発ノウハウ〜
ekispert_api
0
290
Agentic AI 時代のテスト手法: Kiro とはじめるプロパティベーステスト (AWS Summit Japan 2026 | DEV212)
ymhiroki
0
200
product engineering with qa
nealle
0
140
本当の”仕事”を手放せる未来が見えた
mu7889yoon
0
220
SRE Lounge Hiroshimaへの招待
grimoh
0
150
記録をかんたんに、提案をパーソナルに ── AIであすけんが目指すもの
oprstchn
0
140
飲食店もAIで。レジ締めやハンディシステムをつくってる話 / Using AI for restaurant management
vtryo
0
240
プロンプト_きのこカンファレンス2026_LT
yurufuwahealer
0
130
Featured
See All Featured
From π to Pie charts
rasagy
0
230
My Coaching Mixtape
mlcsv
0
170
Information Architects: The Missing Link in Design Systems
soysaucechin
0
1k
A Modern Web Designer's Workflow
chriscoyier
698
190k
Let's Do A Bunch of Simple Stuff to Make Websites Faster
chriscoyier
508
140k
Tips & Tricks on How to Get Your First Job In Tech
honzajavorek
1
550
WENDY [Excerpt]
tessaabrams
11
38k
Making Projects Easy
brettharned
120
6.7k
実際に使うSQLの書き方 徹底解説 / pgcon21j-tutorial
soudai
PRO
201
75k
Building a A Zero-Code AI SEO Workflow
portentint
PRO
0
620
Navigating Weather and Climate Data
rabernat
0
270
Darren the Foodie - Storyboard
khoart
PRO
3
3.4k
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?