博客 / 詳情

返回

PHP + xdebug 分析代碼性能瓶頸

通常啓用了xdebug插件,性能測試輸出文件會伴隨生成,通常是以cachegrind.out.xxxx 文件存在。

該文件可以通過第三方工具來進行代碼性能分析。

但如果本地有多個項目/網站,所有的profile 都輸出到一個文件中了,這樣並不方便後面進行性能分析。

自定義profile 文件名稱

可以通過配置xdebug.profiler_output_name 參數來設置輸出文件名稱,部分參數如下:

符號 含義 配置樣例 樣例文件名
%c 當前工作目錄的crc32校驗值 cachegrind.out.%c cachegrind.out.1258863198
%p 當前服務器進程的pid cachegrind.out.%p cachegrind.out.9685
%r 隨機數 cachegrind.out.%r cachegrind.out.072db0
%s 腳本文件名(注) cachegrind.out.%s cachegrind.out._home_httpd_html_test_xdebug_test_php
%t Unix時間戳(秒) cachegrind.out.%t cachegrind.out.1179434742
%u Unix時間戳(微秒) cachegrind.out.%u cachegrind.out.1179434749_642382
%H $_SERVER['HTTP_HOST'] cachegrind.out.%H cachegrind.out.localhost
%R $_SERVER['REQUEST_URI'] cachegrind.out.%R cachegrind.out._test_xdebug_test_php_var=1_var2
%S session_id (來自$_COOKIE 如果設置了的話) cachegrind.out.%S cachegrind.out.c70c1ec2375af58f74b390bbdd2a679d
%% %字符 cachegrind.out.%% cachegrind.out.%%

編輯php.ini 配置文件:

xdebug.profiler_output_name = cachegrind.out.%H

然後重啓 php server。

在Mac 下,profile 文件存放於/var/tmp/目錄中。

性能分析

在Mac 下,有MacCallGrind 和 qcachegrind 可以使用,不過前者是收費,直接通過Apple Store下載,後者是免費。需要手動安裝。

安裝graphviz,用來Call Graph功能:

$ brew install graphviz

安裝 qcachegrind:

$ brew install qcachegrind

安裝完成之後,就可以打開 qcachegrind 應用了,圖形界面如下:

其他

不過需要注意,開啓了profile文件輸出之後,如果本地項目多的話,很容易佔用磁盤大面積空間,下圖是我半年左右沒有清理的狀態:

可以使用命令進行清理:

$ sudo rm -fr /private/var/tmp/cachegrind.out.*

參考鏈接

  • 使用xdebug對php進行profile的輸出
  • php+xdebug+qcachegrind(mac)性能分析
user avatar
0 位用戶收藏了這個故事!

發佈 評論

Some HTML is okay.