亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 開發 > PHP > 正文

php輕量級的性能分析工具xhprof的安裝使用

2024-05-04 23:38:46
字體:
來源:轉載
供稿:網友

之前一直使用基于Xdebug進行PHP的性能分析,對于本地開發環境來說是夠用了,但如果是線上環境的話,xdebug消耗較大,配置也不夠靈活,因此線上環境建議使用xhprof進行PHP性能追蹤及分析。

一、前言

有用的東西還是記錄下來吧,也方便以后的查詢;這次記錄一下xhprof的安裝使用;

xhprof是facebook開源出來的一個php輕量級的性能分析工具,跟Xdebug類似,但性能開銷更低,

還可以用在生產環境中,也可以由程序開 關來控制是否進行profile。

二、安裝

 

 
  1. wget http://pecl.php.net/get/xhprof-0.9.3.tgz  
  2. tar zxf xhprof-0.9.3.tgz  
  3. cd xhprof-0.9.3/extension 
  4. /usr/bin/phpize  
  5. (php版本安裝后生成的phpize文件,可根據phpinfo查看,所以php版本不同,生成的phpize也不同,此步驟主要生成configure文件) 
  6. ./configure –with-php-config=/usr/bin/php-config  
  7. (php-config的路徑,也是php安裝后生成的文件)  
  8. make  
  9. sudo make install  

(會自動將生成的擴展文件拷貝到擴展目錄中/usr/lib64/php/modules)

當然具體的php文件的目錄,每個人不盡相同,可根據phpinfo查詢

三、php.ini配置

根據phpinfo找到 extension_dir的目錄

(/etc/php.d/xhprof.ini)

添加一下內容:

 

 
  1. extension=xhprof.so 
  2. xhprof.output_dir=/tmp/xhprof //xhprof的分析日志 

四、重啟服務

 

 
  1. sudo /etc/init.d/http restart 

查看phpinfo是否安裝成功

五、使用方法

 

 
  1. 開頭: 
  2. xhprof_enable(); //開啟監測  
  3. //xhprof_enable(XHPROF_FLAGS_NO_BUILTINS); 不記錄內置的函數  
  4. //xhprof_enable(XHPROF_FLAGS_CPU + XHPROF_FLAGS_MEMORY); 同時分析CPU和Mem的開銷  
  5.  
  6. //要測試的代碼 
  7. ... 
  8. ... 
  9. ... 
  10.  
  11. 結尾: 
  12. $xhprof_data = xhprof_disable(); //停止監測,返回運行數據 
  13. $xhprof_root = '/(xhprof的虛擬主機目錄)/';  
  14. //引入當初安裝到xhprof虛擬主機目錄中的文件 
  15. include_once $xhprof_root."xhprof_lib/utils/xhprof_lib.php";  
  16. include_once $xhprof_root."xhprof_lib/utils/xhprof_runs.php";  
  17. $xhprof_runs = new XHProfRuns_Default();  
  18. $run_id = $xhprof_runs->save_run($xhprof_data, "xhprof"); 
  19. echo '<a href="http://(xhprof的虛擬主機域名)/xhprof_html/index.php?run='.$run_id.'&source=xhprof" target="_blank">xhprof統計</a>';  

上邊的代碼使用了,給xhprof設置虛擬主機的方法。

把源碼包中的 xhprof_html 和 xhprof_lib 文件夾拷貝到自己建立的虛擬目錄中

cp -r xhprof_html xhprof_lib /xxx/xhprof/ (此處目的是建立數據分析目錄,可將此目錄配置成虛擬主機訪問)

運行后,統計點擊返回的 xhprof統計 鏈接,即可。

六、注意問題以及名詞解釋

在顯示的統計頁面中,點[View Full Callgraph]圖形化顯示(最大的性能問題會用紅色標出,其次是黃色);

點擊后,可能提示錯誤消息,執行以下命令即可

 

 
  1. yum install -y graphviz 
  2. yum install graphviz-gd 

名詞解釋

 

 
  1. Function Name 函數名 
  2. Calls 調用次數 
  3. Calls% 調用百分比 
  4. Incl. Wall Time (microsec) 調用的包括子函數所有花費時間 以微秒算(一百萬分之一秒) 
  5. IWall% 調用的包括子函數所有花費時間的百分比 
  6. Excl. Wall Time (microsec) 函數執行本身花費的時間,不包括子樹執行時間,以微秒算(一百萬分之一秒) 
  7. EWall% 函數執行本身花費的時間的百分比,不包括子樹執行時間 
  8. Incl. CPU(microsecs) 調用的包括子函數所有花費的cpu時間。減Incl. Wall Time即為等待cpu的時間 
  9. 減Excl. Wall Time即為等待cpu的時間 
  10. ICpu% Incl. CPU(microsecs)的百分比 
  11. Excl. CPU(microsec) 函數執行本身花費的cpu時間,不包括子樹執行時間,以微秒算(一百萬分之一秒)。 
  12. ECPU% Excl. CPU(microsec)的百分比 
  13. Incl.MemUse(bytes) 包括子函數執行使用的內存。 
  14. IMemUse% Incl.MemUse(bytes)的百分比 
  15. Excl.MemUse(bytes) 函數執行本身內存,以字節算 
  16. EMemUse% Excl.MemUse(bytes)的百分比 
  17. Incl.PeakMemUse(bytes) Incl.MemUse的峰值 
  18. IPeakMemUse% Incl.PeakMemUse(bytes) 的峰值百分比 
  19. Excl.PeakMemUse(bytes) Excl.MemUse的峰值 
  20. EPeakMemUse% EMemUse% 峰值百分比 

xhprof的安裝與簡易用法

xhprof是Facebook開源的輕量級PHP性能分析工具,Linux環境下可以通過pecl直接安裝,比如在Ubuntu下僅需3行指令

 

 
  1. pecl install xhprof-beta 
  2. echo "extension=xhprof.so" > /etc/php5/fpm/conf.d/xhprof.ini 
  3. service php5-fpm restart 

之后可以通過phpinfo()檢查擴展是否已經加載。

具體如何使用呢,xhprof項目中已經提供了示例以及簡易的UI,下載xhprof項目到web服務器,假設可以通過http://localhost/xhprof/訪問,那么訪問http://localhost/xhprof/examples/sample.php可以看到一些輸出,并且提示通過訪問http:///index.php?run=XXX&source=xhprof_foo查看結果。接下來訪問http://localhost/xhprof/xhprof_html/就可以看到已經保存的結果,列出了所有函數的調用以及所消耗的時間。

分析一下示例代碼sample.php,關鍵部分只有2行:

 

 
  1. //開啟xhprof并開始記錄 
  2. xhprof_enable(); 
  3. //運行一些函數 
  4. foo(); 
  5. //停止記錄并取到結果 
  6. $xhprof_data = xhprof_disable(); 

$xhprof_data中記錄了程序單步運行過程中所有的函數調用時間及CPU內存消耗等,具體記錄哪些指標可以通過xhprof_enable的入口參數控制,之后的處理已經與xhprof擴展無關,大致是編寫了一個存儲類XHProfRuns_Default,將$xhprof_data序列化并保存到某個目錄,可以通過XHProfRuns_Default(__DIR__)將結果輸出到當前目錄,如果不指定則會讀取php.ini配置文件中的xhprof.output_dir,仍然沒有指定則會輸出到/tmp。

xhprof_html/index.php將記錄的結果整理并可視化,默認的UI里列出了:

•funciton name : 函數名

•calls: 調用次數

•Incl. Wall Time (microsec): 函數運行時間(包括子函數)

•IWall%:函數運行時間(包括子函數)占比

•Excl. Wall Time(microsec):函數運行時間(不包括子函數)

•EWall%:函數運行時間(不包括子函數)

每一項應該不難理解,以項目自帶的sample.php為例,示例中編寫了一個main()函數,main()函數中調用foo()、bar()等一些子函數進行了一點字符處理。整個程序運行過程中,main()函數只運行了一次,并且由于main()函數中包括了所有的邏輯,所以main()函數的IWall%占比為100%,但是由于main()函數的功能都是由子函數實現的,因此main()函數的EWall%只有0.3%,而foo()函數完成了主要的工作,EWall%有98.1%。因此在分析更大型的程序時,往往需要根據這幾項指標分別排序,從不同的角度審視性能消耗。

在xhprof_html/index.php中還可以看到[View Full Callgraph]鏈接,點擊后可以繪制出一張可視化的性能分析圖,如果點擊后報錯的話,可能是缺少依賴graphviz,ubuntu可以通過apt安裝

apt-get install graphviz

更好的注入方式

了解了上面這些,其實就已經可以將xhprof整合到任何我們已有的項目中去了。目前大部分MVC框架都有唯一的入口文件,只需要在入口文件的開始處注入xhprof的邏輯

 

 
  1. //開啟xhprof 
  2. xhprof_enable(XHPROF_FLAGS_MEMORY | XHPROF_FLAGS_CPU); 
  3. //在程序結束后收集數據 
  4. register_shutdown_function(function() { 
  5. $xhprof_data = xhprof_disable(); 
  6.  
  7. //讓數據收集程序在后臺運行 
  8. if (function_exists('fastcgi_finish_request')) { 
  9. fastcgi_finish_request(); 
  10.  
  11. //保存xhprof數據 
  12. ... 
  13. }); 

但是這樣免不了要修改項目的源代碼,其實php本身就提供了更好的注入方式,比如將上述邏輯保存為/opt/inject.php,然后修改php fpm配置文件

 

 
  1. vi /etc/php5/fpm/php.ini 

修改auto_prepend_file配置

 

 
  1. auto_prepend_file = /opt/inject.php 

這樣所有的php-fpm請求的php文件前都會自動注入/opt/inject.php文件

如果使用Nginx的話,還可以通過Nginx的配置文件設置,這樣侵入性更小,并且可以實現基于站點的注入。

 

 
  1. fastcgi_param PHP_VALUE "auto_prepend_file=/opt/inject.php"
 

 

 


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
久久精品影视伊人网| 日韩美女视频免费看| 92福利视频午夜1000合集在线观看| 日本成人精品在线| 日韩精品视频在线观看免费| 精品国产一区二区三区在线观看| 性欧美视频videos6一9| 91精品久久久久久久| 宅男66日本亚洲欧美视频| 国产精品成人在线| 久久久久久久久久久免费精品| 亚洲高清久久网| 国产91免费看片| 欧美日韩在线视频一区二区| 黑人巨大精品欧美一区二区免费| 成人xvideos免费视频| 欧美在线视频a| 91免费观看网站| 日韩av在线免费看| 日韩欧美中文字幕在线观看| 日韩欧美在线一区| 国产精品久久久久999| 欧美色视频日本版| 亚洲成人av在线播放| 精品久久久久久中文字幕大豆网| 欧美大尺度激情区在线播放| 狠狠做深爱婷婷久久综合一区| 欧美国产日本在线| 国产主播喷水一区二区| 国产成人精彩在线视频九色| 亚洲欧美一区二区三区在线| 亚洲精品之草原avav久久| 亚洲国产成人精品久久久国产成人一区| 国产精品国语对白| 国产偷国产偷亚洲清高网站| 国产精品视频区| 欧美性xxxxxx| 国产精品成人av在线| 国产91色在线免费| 欧美福利小视频| 亚洲激情视频在线| 国产脚交av在线一区二区| 97国产在线视频| 2019中文字幕在线| 97精品伊人久久久大香线蕉| 久久久久久久久国产精品| 亚洲精品v欧美精品v日韩精品| 午夜欧美不卡精品aaaaa| 亚洲精品一区中文字幕乱码| 欧美成人免费在线视频| 欧美精品久久一区二区| 欧美视频一二三| 2019中文字幕在线免费观看| 97视频在线观看成人| www.xxxx欧美| 欧美日韩亚洲天堂| 欧美黑人xxx| 在线视频免费一区二区| 亚洲第一色中文字幕| 亚洲精品久久久久久久久久久久| 国产精品久久久久久久久免费看| 日韩激情视频在线| 欧美专区在线观看| 国产一区二区三区在线播放免费观看| 国产精品免费看久久久香蕉| 欧美交受高潮1| 亚洲欧美精品伊人久久| 97欧美精品一区二区三区| 亚洲精品日韩av| 久久男人资源视频| 成人黄色av网| 欧美色视频日本版| 欧美日韩高清在线观看| 国产精品美女无圣光视频| 97人人爽人人喊人人模波多| 久久人人爽国产| 欧美高清在线视频观看不卡| 亚洲视频在线播放| 久久久亚洲国产天美传媒修理工| 亚洲欧美一区二区三区在线| 国产日韩精品一区二区| 国产精品草莓在线免费观看| 国产这里只有精品| 亚洲国产精品999| 日韩成人免费视频| xvideos国产精品| 日韩成人网免费视频| 性欧美亚洲xxxx乳在线观看| 欧美视频一区二区三区…| 亚洲一区二区三区视频| 日韩最新免费不卡| 在线精品91av| 色综合伊人色综合网| 午夜精品久久久久久久久久久久| 国产精品白嫩初高中害羞小美女| 91精品久久久久久久久久另类| 日本在线精品视频| 成人网在线免费观看| 粉嫩老牛aⅴ一区二区三区| 欧美成人一区在线| 91精品国产99久久久久久| 国产精品夜色7777狼人| 日本不卡免费高清视频| 久久久久亚洲精品国产| 国产精品入口尤物| 最近2019中文字幕在线高清| 日韩国产精品视频| 亚洲国产三级网| 色综合久久久久久中文网| 久久精品国产精品亚洲| 亚洲女人天堂成人av在线| 国产欧美日韩综合精品| 97视频人免费观看| 91欧美精品成人综合在线观看| 91精品国产91久久久久久久久| 欧美亚洲国产日本| 国产精品精品一区二区三区午夜版| 大伊人狠狠躁夜夜躁av一区| 精品呦交小u女在线| 亚洲无av在线中文字幕| 欧美成人全部免费| 中文字幕日韩av综合精品| 91影院在线免费观看视频| 一区二区亚洲欧洲国产日韩| 亚洲欧洲第一视频| 成人免费观看网址| 国产成人在线一区| 日韩av黄色在线观看| 欧美黄色www| 一本色道久久88精品综合| 精品亚洲va在线va天堂资源站| 日韩国产精品亚洲а∨天堂免| 精品人伦一区二区三区蜜桃网站| 国产精品一区二区久久国产| 欧美激情videoshd| xxxxx成人.com| 性夜试看影院91社区| 日韩精品小视频| 91大神在线播放精品| 欧美激情精品久久久久久免费印度| 久久久91精品国产一区不卡| 91精品国产高清久久久久久久久| 久久久久久久久久久久av| 日韩成人中文字幕在线观看| 一区国产精品视频| 亚洲精品成人网| 中文字幕亚洲字幕| 欧美一级片免费在线| 欧美多人乱p欧美4p久久| 91精品国产高清久久久久久| 中文字幕av日韩| 亚洲曰本av电影| 欧美激情国产日韩精品一区18| 最新的欧美黄色| 久久久欧美精品| 欧美精品免费在线观看| 国产成人久久精品| 亚洲综合精品一区二区| 日韩有码在线电影| 久久久久久久激情视频| 国产精品视频白浆免费视频| 国语自产精品视频在免费| 国产精品亚洲激情| 日韩av网站大全|