使用 Xdebug 進行分析

PHP 的副檔名為 Xdebug,可用於幫助分析 PHP 應用程式以及執行時除錯。執行探查器時,輸出將以二進位制格式寫入檔案 cachegrind。每個平臺上都有應用程式來分析這些檔案。

要啟用分析,請安裝擴充套件並調整 php.ini 設定。在我們的示例中,我們將根據請求引數可選地執行配置檔案。這允許我們將設定保持靜態並僅在需要時開啟探查器。

// Set to 1 to turn it on for every request
xdebug.profiler_enable = 0
// Let's use a GET/POST parameter to turn on the profiler
xdebug.profiler_enable_trigger = 1
// The GET/POST value we will pass; empty for any value
xdebug.profiler_enable_trigger_value = ""
// Output cachegrind files to /tmp so our system cleans them up later
xdebug.profiler_output_dir = "/tmp"
xdebug.profiler_output_name = "cachegrind.out.%p"

接下來,使用 Web 客戶端向你希望分析的應用程式的 URL 發出請求,例如

http://example.com/article/1?XDEBUG_PROFILE=1

在頁面處理時,它將寫入名稱類似於的檔案

/tmp/cachegrind.out.12345

請注意,它將為每個執行的 PHP 請求/程序寫入一個檔案。因此,例如,如果你希望分析表單帖子,將為 GET 請求編寫一個配置檔案以顯示 HTML 表單。需要將 XDEBUG_PROFILE 引數傳遞給後續的 POST 請求,以分析處理表單的第二個請求。因此,在分析時,有時更容易執行 curl 直接 POST 表單。

一旦編寫,配置檔案快取就可以被諸如 KCachegrind 之類的應用程式讀取。

http://i.stack.imgur.com/ENtOu.gif

這將顯示以下資訊:

  • 執行的功能
  • 呼叫時間,包括後續函式呼叫本身
  • 每個函式被呼叫的次數
  • 呼叫圖表
  • 原始碼連結

顯然,效能調優對每個應用程式的用例都非常具體。一般來說,尋找:

  • 重複呼叫你不希望看到的相同功能。對於處理和查詢資料的函式,這些可能是應用程式快取的主要機會。
  • 執行緩慢的功能。申請大部分時間都在哪裡?效能調優的最佳回報是關注那些消耗最多時間的應用程式部分。

注意 :Xdebug,特別是它的分析功能,是非常耗費資源的,並且會降低 PHP 的執行速度。建議不要在生產伺服器環境中執行它們。