XHProf による PHP パフォーマンスプロファイリング
特定のページで Update を行ったときだけ、なかなかレスポンスが帰ってこない。
ということでプロファイルをとってみます。
PHP
Version: 5.6.25
XHProf
PHP 専用のプロファイラです。
導入手順は Google さんにおまかせします。
ただ、XHProf は活発にメンテナンスされていない?ようなので、いま使うなら backfire とかいいかも。
XHGui, Callgraph
プロファイリング結果を視覚化するために使います。
結果の見方をざっくりと
トップ画面。
ページ上部「Hardest Hit」の「Today」をクリック。
とりあえず「Avg Wall Time」降順に並べて目的のパスを見つける。
URL をクリックすると実行時間などがグラフで描画されます。
グラフの頂点をクリックすると詳細が表示される。
今回特に注目したのは「Exclusive Wall Time」です。Wall Time という項目もありますが、これは Child Function を含めた関数の実行時間になります。対して Exclusive Wall Time は 関数単体(Current Function)の実行時間です。
Exclusive Wall Time 降順に並び替えると「fread」関数がトップにきます。
関数名をクリックすると詳細なデータを見れます。
呼び出し元(Parent Function)は「Cake\Network\Socket::read」だということがわかりました。
さらに遡っていくと「Cake\Mailer\Transport\SmtpTransport::_sendData」に行き着きます。
ここでふと思い立ってエラーログをみてみると、、、
なんてこったい\(^o^)/
タイムアウトまでがんばっていたので、なかなかレスポンスが帰ってこなかったようです。
プロファイリングの前に、まずはログを確認しないとですね。
ちなみに「View Callgraph」をクリックするとコールグラフが描画されます。
こんな感じ。