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
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
88
スタートアップ6年目のレビュー文化.pdf
tsuyoshi
1
2k
PHPを少し深堀るよ.pdf
tsuyoshi
0
410
Reactive_Manifesto.pdf
tsuyoshi
0
94
About_Resilience.pdf
tsuyoshi
1
100
エンジニアの循環ってgood_or_bad_.pdf
tsuyoshi
0
1.3k
スタートアップしてからの失敗の数々
tsuyoshi
0
2.5k
スタートアップエンジニアの役割
tsuyoshi
0
550
Other Decks in Technology
See All in Technology
GoCon2026 - Open Source, Open World
sanposhiho
2
580
Tab5をRubyで動くパソコンにする
kishima
2
270
2026-09-10 【Snowflake World Tour Tokyo 2026】dbt Core と Snowflake で実現する多層的なデータガバナンス / Multi-Layered Data Governance Powered by dbt Core and Snowflake
civitaspo
0
250
Reactの設計論
uhyo
11
3.3k
OpenTelemetry eBPF Instrumentationの舞台裏 / Behind the Scenes of OpenTelemetry eBPF Instrumentation
ymotongpoo
3
390
Multica × 長期記憶:40個のミニプロジェクト管理
eiei114
1
210
#jawssonic2026 あの時代が悪かった ~動かなかったSageMakerと共に迎えたイベント当日~
ktkn1129
0
140
例外の正しい扱い方 そのエラー try-catchして大丈夫?
jinwatanabe
3
400
enechainの内製セルフサービスプラットフォーム
hiyosi
0
140
【視聴者参加型!】AWSセキュリティアンチパターンクイズ
syoshie
0
460
Webとヘルスデータ
yukukotani
1
200
20260906 「AWS運用入門」著者が教える、運用業務への生成AI活用入門
masaruogura
0
250
Featured
See All Featured
Templates, Plugins, & Blocks: Oh My! Creating the theme that thinks of everything
marktimemedia
31
2.9k
The Power of CSS Pseudo Elements
geoffreycrofte
82
6.5k
Documentation Writing (for coders)
carmenintech
77
5.5k
The Curse of the Amulet
leimatthew05
2
14k
No one is an island. Learnings from fostering a developers community.
thoeni
21
3.8k
<Decoding/> the Language of Devs - We Love SEO 2024
nikkihalliwell
1
320
Making Projects Easy
brettharned
120
6.7k
Dealing with People You Can't Stand - Big Design 2015
cassininazir
367
27k
Principles of Awesome APIs and How to Build Them.
keavy
128
18k
Digital Ethics as a Driver of Design Innovation
axbom
PRO
1
420
コードの90%をAIが書く世界で何が待っているのか / What awaits us in a world where 90% of the code is written by AI
rkaga
63
45k
Mobile First: as difficult as doing things right
swwweet
225
10k
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?