Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Improvement with xhprof and php-quick-profiler

Improvement with xhprof and php-quick-profiler

tsuyoshi nakamura

February 17, 2017
Tweet

More Decks by tsuyoshi nakamura

Other Decks in Technology

Transcript

  1. Agenda 経緯 調査するに至った経緯 使ったツール 調査する時に使ったツールや設定 等 調査〜結果〜考案 調査結果から考えられる原因や改 善策など 対策

    最終的にどんな施策を行ったか 結果 行った施策がどうだったかの評価 まとめ 振り返って見てどこが良かったか、 まだ改善の余地はあるか等
  2. 経緯 ▪ ガイア砲ショック 当時の対応はホント泣けた ▪ あらゆる面を改善していかなきゃいかん ▪ PHPのPerformanceが低すぎる問題を少し手をつけるか ▪ `pmap`コマンドからサーバで動いているプロセスのメモリマッピングを見

    せて貰った ▫ `anon`=匿名メモリが多かった ▫ php-fpmの再起動直後と数日運用してからの`pmap`の結果から やっぱり`anon`=php側でメモリを多くくってるなぁーと分かった ▪ PHP5.6に最近したし、FWもFPMもnginxも比較的新しいし、自分たちで 作ったどこかの処理が原因なんだろうなー ▪ 時間取って向き合うと決める 非公開 非公開
  3. 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';
  4. 対応 -1- ▪ アクセスの度に動くAgent classの見直し ▫ xhprofの指摘箇所 ▫ Coreクラスのextendを止めた ▫

    親クラスのmethodを使ってないし ▫ FWの仕様でAutoloader設定されているAgentクラスは親クラスを辿 り_initが毎回自動で走るようになってた ▪ 使って無いのに無駄に動いている
  5. 対応 -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.
  6. まとめ ▪ Agent Classの改修が結果的に一番効果あった ▪ Coreクラスの部分を除外して考えた事でリリースまでの リードタイム短縮になって結果良かった ▪ 絶対に改善するぜという心意気重要!! ▪

    そこまで難しいツールで無かったのでもっと早くやれば良 かったという結果論 ▪ 定常的に見える化するとよりよいなぁ ▫ チームで改善ができる