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
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
87
スタートアップ6年目のレビュー文化.pdf
tsuyoshi
1
2k
PHPを少し深堀るよ.pdf
tsuyoshi
0
400
Reactive_Manifesto.pdf
tsuyoshi
0
92
About_Resilience.pdf
tsuyoshi
1
97
エンジニアの循環ってgood_or_bad_.pdf
tsuyoshi
0
1.3k
スタートアップしてからの失敗の数々
tsuyoshi
0
2.5k
スタートアップエンジニアの役割
tsuyoshi
0
550
Other Decks in Technology
See All in Technology
AIエージェントの知識表現と推論に なぜグラフが使われるのか - 記号的AIの復権とニューラルAIとの統合
yohei1126
1
250
20260608_Codexの可能性_ノンプログラマー向け_大城追記
doradora09
PRO
0
710
20260801_スクフェス大阪
kgnkhkr
0
150
LangfuseによるLLMOps基盤の構築と活用事例
zozotech
PRO
1
220
セキュリティ研修【MIXI 26新卒技術研修】
mixi_engineers
PRO
32
27k
AI エージェント時代のデジタルアイデンティティ
fujie
2
1.3k
13年運用タイトルのサーバーサイドが辿り着いた現在地 ― モンスターストライクにおける技術・組織・AI活用から得た知見
mixi_engineers
PRO
1
360
なぜ、あなたのAPIは使われないのか? AX時代の設計原則、ガードレール、運用体制
yokawasa
1
1k
「待ち時間」の消滅と「自我消耗」の加速:生成AI時代のエンジニアを救うメンタル・リソース管理
poropinai1966
0
390
脱Jenkins、インターン生が挑んだCIツールGitHubActions移行
mixi_engineers
PRO
1
290
現場で使える AWS DevOps Agent 活用ノウハウ - Release Management 機能の検証結果を添えて / AWS DevOps Agent Release Management and Know-How
kinunori
5
830
AIは実装を速くする。では、私たちは何を今作るべきか?-立場を越えてリリースに向き合ったチーム開発の実践 / 20260801 Hiromi Nakaya and Naoki Takahashi
shift_evolve
PRO
2
100
Featured
See All Featured
Redefining SEO in the New Era of Traffic Generation
szymonslowik
1
370
Efficient Content Optimization with Google Search Console & Apps Script
katarinadahlin
PRO
1
750
What does AI have to do with Human Rights?
axbom
PRO
1
2.3k
DevOps and Value Stream Thinking: Enabling flow, efficiency and business value
helenjbeal
1
280
Bioeconomy Workshop: Dr. Julius Ecuru, Opportunities for a Bioeconomy in West Africa
akademiya2063
PRO
1
190
Unsuck your backbone
ammeep
672
58k
Collaborative Software Design: How to facilitate domain modelling decisions
baasie
1
270
Ten Tips & Tricks for a 🌱 transition
stuffmc
0
160
Typedesign – Prime Four
hannesfritz
42
3.1k
Taking LLMs out of the black box: A practical guide to human-in-the-loop distillation
inesmontani
PRO
3
2.3k
Conquering PDFs: document understanding beyond plain text
inesmontani
PRO
4
2.9k
Let's Do A Bunch of Simple Stuff to Make Websites Faster
chriscoyier
508
140k
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?