1. 程式人生 > >簡傑的php程式設計分享-1.3 xdebug效能分析

簡傑的php程式設計分享-1.3 xdebug效能分析

介紹

在上兩期中我已經對 xdebug 最核心的操作已經進行了講解。相信你可以擺脫寫 var_dump($data);die; 的編寫和完成除錯後的清除了。這一期我們來學習xdebug的第二個特色-效能分析。這一個功能,在實操中用的不是很多。

使用場景:

  1. 高併發專案的核心功能優化。通過檢視執行一個方法經過的依賴耗時情況,進行程式碼優化。

環境說明

  • windows
  • vagrant+vbox+centos7+nginx+php
  • phpstorm

學前準備

  1. xdebug + phpstorm 除錯環境已經可以正常執行

學習點

  1. 明白 xdebug 效能分析需要做那些配置
  2. 知道怎麼去看效能報告

xdebug 配置

xdebug 是通過訪問指定方法。生成效能分析檔案,再通過分析軟體進行檢視效能結果。

php.ini 新增配置


xdebug.profiler_enable=Off
xdebug.profiler_enable_trigger=On
xdebug.profiler_output_dir="/tmp/"
xdebug.profiler_output_name="cachegrind.out.%R"

phpstorm 分析效能檔案

比較建議一個方法訪問完後,生成分析檔案,馬上進行效能分析,分析完後再清除檔案。為了資料準確性,我們還需要進行多次對比。找效能引數的平均值來提高準確性。

我們得知道那個依賴方法耗時最久,是什麼原因。有沒有優化的可能。

phpstorm xdebug 效能分析工具詳解

我們通過 tool -> Analyze Xdebug profiler Snapshot 開啟效能分析檔案 cachegrind.out. 打頭的檔案。就會進入以下介面Analyze Xdebug profiler Snapshot

1、瞭解各個選項的意思

  • Refresh - 重新整理
  • Execution statistics - 執行統計資料
  • Call Trees - 哪個函式呼叫哪個函式
  • Callable - 已執行的檔案
  • Own Time - 函式執行自己的程式碼所花費的時間(不包括對其他函式的呼叫)
  • Calls - 呼叫次數
  • Callees - 呼叫哪些函式
  • Callers - 從函式被呼叫的地方
  • time 前的數字代表的是什麼意思

time 列裡有 數字和百分比。分別代表 執行時間和執行佔用總時間百分比

單位是 server 旁邊的 time 那裡進行設定.預設是 ms

  • callees 裡的方法大部分都會出來一個摺疊的圖示,有什麼用

這個可以讓我們檢視他的上一步執行了以什麼操作。這個可以方便我們在瞭解呼叫到這個函式的過程。

2、找到我們關心的資料

  • 那些地方佔用的執行時間最多,為什麼

我們可以在 Execution statistics 標籤裡對 own time 進行排序取執行佔用最多的內容。裡面會包含檔案和函式以及方法。如果我們設定了 server 關聯當前的專案,統計裡的方法是可以進行跳轉到專案的實際程式碼裡。

我們通過 Callees 標籤檢視函式裡那些方法呼叫耗時最多

  • 那些方法呼叫最多次,在那些地方呼叫的比較多

Execution statistics 標籤裡對 calls 進行排序取執行次數最多的函式或方法。

可通過下面的 Callers 檢視那些地方對他進行了呼叫

系列文章

FQA

  1. 為什麼要設定 xdebug.profiler_output_name 預設的不就可以了嗎?

如果你的專案不是多入口的型別,你儲存的到一個檔案就會出現效能分析檔案不精確的情況。而我在上文中用的是 $_SERVER['REQUEST_URI'] 作為檔案字尾。可以很好的區分效能分析檔案。