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
520
PHPを少しでも早く_条件はあるよ_.pdf
tsuyoshi
0
96
スタートアップ6年目のレビュー文化.pdf
tsuyoshi
1
2k
PHPを少し深堀るよ.pdf
tsuyoshi
0
420
Reactive_Manifesto.pdf
tsuyoshi
0
100
About_Resilience.pdf
tsuyoshi
1
110
エンジニアの循環ってgood_or_bad_.pdf
tsuyoshi
0
1.4k
スタートアップしてからの失敗の数々
tsuyoshi
0
2.5k
スタートアップエンジニアの役割
tsuyoshi
0
570
Other Decks in Technology
See All in Technology
基本から分かる!AWSセキュリティ運用の考え方と任せ方
cmusudakeisuke
1
430
新米を「売り越さない」、Aurora DSQLで作る在庫ゼロ死守の限定ドロップEC
yama3133
0
180
今から始めるAWS環境の暗号移行 - ポスト量子時代に備える
sato4mi
0
150
Sinatra on PicoRuby ローカルでセルフホスト
bash0c7
0
100
サボる子はいねぇがー!AgentCoreハーネスの脆弱性に学ぶ、エージェントの入力バリデーション
iwamot
PRO
4
270
試験勉強はGrokBotでやれ
maigo999
0
110
OneLakeをデータソースにした AI Search(Foundry IQ)の ライフサイクル管理
ryuseiiida
0
230
増え続けるプロダクトの品質をどう担保するか。ProductSpecとTypeScriptによる取り組み
joere
3
410
【dbts2026】AIエージェントの 判断と探索を変える、 データベース エンジニアリング― 既存DBの処理と依存関係から作る、オペレーショナルオントロジー ―
shisyu_gaku
0
190
Microsoft Entra Kerberos で実現するクラウド デバイス管理
tamaiyutaro
2
570
bpf_arenaとstruct_opsを使うのが難しかった話
masu_mi
0
200
レガシーコードに対する loop engineering的なAI開発プロセス導入について
kubell_hr
0
260
Featured
See All Featured
Jamie Indigo - Trashchat’s Guide to Black Boxes: Technical SEO Tactics for LLMs
techseoconnect
PRO
0
740
The Cult of Friendly URLs
andyhume
79
7.1k
How to Build an AI Search Optimization Roadmap - Criteria and Steps to Take #SEOIRL
aleyda
1
2.2k
Marketing Yourself as an Engineer | Alaka | Gurzu
gurzu
0
360
Agile that works and the tools we love
rasmusluckow
331
22k
Bootstrapping a Software Product
garrettdimon
PRO
306
120k
Mozcon NYC 2025: Stop Losing SEO Traffic
samtorres
1
600
Deep Space Network (abreviated)
tonyrice
0
410
What Being in a Rock Band Can Teach Us About Real World SEO
427marketing
0
1.1k
Primal Persuasion: How to Engage the Brain for Learning That Lasts
tmiket
0
520
Improving Core Web Vitals using Speculation Rules API
sergeychernyshev
21
1.7k
Pawsitive SEO: Lessons from My Dog (and Many Mistakes) on Thriving as a Consultant in the Age of AI
davidcarrasco
0
290
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?