《PHP實例:php輕量級的性能分析工具xhprof的安裝使用》要點:
本文介紹了PHP實例:php輕量級的性能分析工具xhprof的安裝使用,希望對您有用。如果有疑問,可以聯系我們。
PHP進修一、前言
PHP學習 有用的東西還是記錄下來吧,也便利以后的查詢;這次記錄一下xhprof的安裝使用;
PHP學習 xhprof是facebook開源出來的一個php輕量級的性能闡發工具,跟Xdebug類似,但性能開銷更低,
PHP學習 還可以用在生產環境中,也可以由法式開 關來控制是否進行profile.
PHP進修二、安裝
PHP學習
wget http://pecl.php.net/get/xhprof-0.9.3.tgz
tar zxf xhprof-0.9.3.tgz
cd xhprof-0.9.3/extension
/usr/bin/phpize
(php版本安裝后生成的phpize文件,可根據phpinfo查看,所以php版本分歧,生成的phpize也分歧,此步驟主要生成configure文件)
./configure Cwith-php-config=/usr/bin/php-config
(php-config的路徑,也是php安裝后生成的文件)
make
sudo make install
PHP學習?(會自動將生成的擴展文件拷貝到擴展目錄中/usr/lib64/php/modules)
PHP學習??? 當然具體的php文件的目錄,每小我不盡相同,可根據phpinfo查詢
PHP學習三、php.ini設置裝備擺設
PHP學習依據phpinfo找到 extension_dir的目錄
(/etc/php.d/xhprof.ini)
PHP進修添加一下內容:
PHP學習
extension=xhprof.so
xhprof.output_dir=/tmp/xhprof //xhprof的闡發日志
PHP學習四、重啟服務
PHP學習
sudo /etc/init.d/http restart
PHP學習?查看phpinfo是否安裝勝利
PHP學習五、使用辦法
PHP學習
開頭:
xhprof_enable(); //開啟監測
//xhprof_enable(XHPROF_FLAGS_NO_BUILTINS); 不記錄內置的函數
//xhprof_enable(XHPROF_FLAGS_CPU + XHPROF_FLAGS_MEMORY); 同時分析CPU和Mem的開銷
//要測試的代碼
...
...
...
結尾:
$xhprof_data = xhprof_disable(); //停止監測,返回運行數據
$xhprof_root = '/(xhprof的虛擬主機目錄)/';
//引入當初安裝到xhprof虛擬主機目錄中的文件
include_once $xhprof_root."xhprof_lib/utils/xhprof_lib.php";
include_once $xhprof_root."xhprof_lib/utils/xhprof_runs.php";
$xhprof_runs = new XHProfRuns_Default();
$run_id = $xhprof_runs->save_run($xhprof_data, "xhprof");
echo '<a href="http://(xhprof的虛擬主機域名)/xhprof_html/index.php?run='.$run_id.'&source=xhprof" target="_blank">xhprof統計</a>';
PHP學習 上邊的代碼使用了,給xhprof設置虛擬主機的辦法.
PHP學習 把源碼包中的 xhprof_html 和 xhprof_lib 文件夾拷貝到本身建立的虛擬目錄中
PHP學習 cp -r xhprof_html xhprof_lib /xxx/xhprof/? (此處目的是建立數據分析目錄,可將此目錄配置成虛擬主機拜訪)
PHP進修 運行后,統計點擊返回的 xhprof統計 鏈接,即可.
PHP進修六、注意問題以及名詞解釋
PHP學習 在顯示的統計頁面中,點[View Full Callgraph]圖形化顯示(最大的性能問題會用赤色標出,其次是黃色);
PHP學習 點擊后,可能提示差錯消息,執行以下命令即可
PHP進修
yum install -y graphviz
yum install graphviz-gd
PHP進修 名詞解釋
PHP進修?
PHP學習
Function Name 函數名
Calls 調用次數
Calls% 調用百分比
Incl. Wall Time (microsec) 調用的包含子函數所有花費時間 以微秒算(一百萬分之一秒)
IWall% 調用的包含子函數所有花費時間的百分比
Excl. Wall Time (microsec) 函數執行本身花費的時間,不包含子樹執行時間,以微秒算(一百萬分之一秒)
EWall% 函數執行本身花費的時間的百分比,不包含子樹執行時間
Incl. CPU(microsecs) 調用的包含子函數所有花費的cpu時間.減Incl. Wall Time即為等待cpu的時間
減Excl. Wall Time即為等待cpu的時間
ICpu% Incl. CPU(microsecs)的百分比
Excl. CPU(microsec) 函數執行本身花費的cpu時間,不包含子樹執行時間,以微秒算(一百萬分之一秒).
ECPU% Excl. CPU(microsec)的百分比
Incl.MemUse(bytes) 包含子函數執行使用的內存.
IMemUse% Incl.MemUse(bytes)的百分比
Excl.MemUse(bytes) 函數執行本身內存,以字節算
EMemUse% Excl.MemUse(bytes)的百分比
Incl.PeakMemUse(bytes) Incl.MemUse的峰值
IPeakMemUse% Incl.PeakMemUse(bytes) 的峰值百分比
Excl.PeakMemUse(bytes) Excl.MemUse的峰值
EPeakMemUse% EMemUse% 峰值百分比
PHP學習xhprof的安裝與簡易用法
PHP學習xhprof是Facebook開源的輕量級PHP性能分析工具,Linux環境下可以通過pecl直接安裝,好比在Ubuntu下僅需3行指令
PHP學習
pecl install xhprof-beta
echo "extension=xhprof.so" > /etc/php5/fpm/conf.d/xhprof.ini
service php5-fpm restart
PHP學習之后可以通過phpinfo()反省擴展是否已經加載.
PHP學習具體如何使用呢,xhprof項目中已經提供了示例以及簡易的UI,下載xhprof項目到web服務器,假設可以通過http://localhost/xhprof/拜訪,那么拜訪http://localhost/xhprof/examples/sample.php可以看到一些輸出,并且提示通過拜訪http://<xhprof-ui-address>/index.php?run=XXX&source=xhprof_foo查看結果.接下來拜訪http://localhost/xhprof/xhprof_html/就可以看到已經保存的結果,列出了所有函數的調用以及所消耗的時間.
PHP學習分析一下示例代碼sample.php,關鍵部門只有2行:
PHP學習
//開啟xhprof并開始記錄
xhprof_enable();
//運行一些函數
foo();
//停止記錄并取到結果
$xhprof_data = xhprof_disable();
PHP學習$xhprof_data中記錄了程序單步運行過程中所有的函數調用時間及CPU內存消耗等,具體記錄哪些指標可以通過xhprof_enable的入口參數控制,之后的處理已經與xhprof擴展無關,大致是編寫了一個存儲類XHProfRuns_Default,將$xhprof_data序列化并保留到某個目錄,可以通過XHProfRuns_Default(__DIR__)將結果輸出到當前目錄,如果不指定則會讀取php.ini配置文件中的xhprof.output_dir,仍然沒有指定則會輸出到/tmp.
PHP學習xhprof_html/index.php將記錄的結果整理并可視化,默認的UI里列出了:
?funciton name : 函數名
?calls: 調用次數
?Incl. Wall Time (microsec): 函數運行時間(包含子函數)
?IWall%:函數運行時間(包含子函數)占比
?Excl. Wall Time(microsec):函數運行時間(不包含子函數)
?EWall%:函數運行時間(不包含子函數)
PHP學習每一項應該不難理解,以項目自帶的sample.php為例,示例中編寫了一個main()函數,main()函數中調用foo()、bar()等一些子函數進行了一點字符處理.整個程序運行過程中,main()函數只運行了一次,并且由于main()函數中包含了所有的邏輯,所以main()函數的IWall%占比為100%,但是由于main()函數的功能都是由子函數實現的,因此main()函數的EWall%只有0.3%,而foo()函數完成了主要的工作,EWall%有98.1%.因此在分析更大型的程序時,往往需要根據這幾項指標分別排序,從不同的角度審視性能消耗.
PHP學習在xhprof_html/index.php中還可以看到[View Full Callgraph]鏈接,點擊后可以繪制出一張可視化的性能闡發圖,如果點擊后報錯的話,可能是缺少依賴graphviz,ubuntu可以通過apt安裝
apt-get install graphviz
PHP進修更好的注入方式
PHP學習了解了上面這些,其實就已經可以將xhprof整合到任何我們已有的項目中去了.目前大部分MVC框架都有唯一的入口文件,只必要在入口文件的開始處注入xhprof的邏輯
PHP學習
//開啟xhprof
xhprof_enable(XHPROF_FLAGS_MEMORY | XHPROF_FLAGS_CPU);
//在程序結束后收集數據
register_shutdown_function(function() {
$xhprof_data = xhprof_disable();
//讓數據收集程序在后臺運行
if (function_exists('fastcgi_finish_request')) {
fastcgi_finish_request();
}
//保留xhprof數據
...
});
PHP學習但是這樣免不了要修改項目的源代碼,其實php本身就提供了更好的注入方式,比如將上述邏輯保留為/opt/inject.php,然后修改php fpm配置文件
PHP學習
vi /etc/php5/fpm/php.ini
PHP學習改動auto_prepend_file配置
PHP學習
auto_prepend_file = /opt/inject.php
PHP學習這樣所有的php-fpm哀求的php文件前都會自動注入/opt/inject.php文件
PHP學習如果使用Nginx的話,還可以通過Nginx的配置文件設置,這樣侵入性更小,而且可以實現基于站點的注入.
PHP進修
fastcgi_param PHP_VALUE "auto_prepend_file=/opt/inject.php";
維易PHP培訓學院每天發布《PHP實例:php輕量級的性能分析工具xhprof的安裝使用》等實戰技能,PHP、MYSQL、LINUX、APP、JS,CSS全面培養人才。
轉載請注明本頁網址:
http://www.snjht.com/jiaocheng/8800.html