摘要:是開發(fā)的一個測試性能的擴展,本文記錄了在應(yīng)用中使用對進行性能優(yōu)化,查找性能瓶頸的方法。函數(shù)用于停止性能分析,并返回分析的數(shù)據(jù)。該參數(shù)用于為剖析結(jié)果添加額外的信息,該參數(shù)的值使用以下宏,如果需要提供多個值,使用進行分隔。
XHProf是facebook 開發(fā)的一個測試php性能的擴展,本文記錄了在PHP應(yīng)用中使用XHProf對PHP進行性能優(yōu)化,查找性能瓶頸的方法。
安裝Xhprof擴展$ wget http://pecl.php.net/get/xhprof-0.9.4.tgz $ tar -zxvf xhprof-0.9.4.tgz $ cd xhprof-0.9.4 $ cd extension/ $ phpize $ ./configure $ make $ sudo make install
修改php.ini
[xhprof] extension=xhprof.so xhprof.output_dir=/tmp
對PHP進行性能分析配置中xhprof.output_dir指定了生成的profile文件存儲的位置,我們將其指定為/tmp。
在XHProf擴展中,一共提供了四個函數(shù)用于對PHP進行性能分析。
xhprof_enable/xhprof_sample_enable函數(shù)用于開始XHProf性能分析,區(qū)別在于前者功能更加強大,而后者則是是以簡單模式啟動性能分析(簡單記錄了函數(shù)的調(diào)用棧信息),開銷比較小。
xhprof_disable/xhprof_sample_disable函數(shù)用于停止性能分析,并返回分析的數(shù)據(jù)。
需要特別說明的函數(shù)是xhprof_enable,其他函數(shù)都是不需要提供參數(shù)的,而該函數(shù)則可以接受兩個可選的參數(shù),用于改變該工具的行為。
void xhprof_enable ([ int $flags = 0 [, array $options ]] )
flags 該參數(shù)用于為剖析結(jié)果添加額外的信息,該參數(shù)的值使用以下宏,如果需要提供多個值,使用|進行分隔。
XHPROFFLAGSNO_BUILTINS 跳過所有的內(nèi)置函數(shù)
XHPROFFLAGSCPU 添加對CPU使用的分析
XHPROFFLAGSMEMORY 添加對內(nèi)存使用的分析
options 數(shù)組形式提供可選參數(shù),在此處提供ignored_functions選項需要忽略的函數(shù)
比如下面的例子,同時對內(nèi)存和CPU進行分析,并且忽略對call_user_func和call_user_func_array函數(shù)的分析。
xhprof_enable( XHPROF_FLAGS_MEMORY|XHPROF_FLAGS_CPU, [ "ignored_functions" => [ "call_user_func", "call_user_func_array" ] ] ); // 這里是PHP代碼,比如業(yè)務(wù)邏輯實現(xiàn)等要被分析的代碼部分 .... $xhprofData = xhprof_disable();// $xhprofData是數(shù)組形式的分析結(jié)果 print_r($xhprofData);
形象化的查看分析結(jié)果注意,如果使用XHPROF_FLAGS_CPU選項對CPU占用也進行分析,在Linux環(huán)境下,會造成比較高的系統(tǒng)負載,因此不建議使用,而推薦只使用XHPROF_FLAGS_MEMORY,對內(nèi)存的分析不會對系統(tǒng)造成太多負載。
使用xhprof_disable完成性能分析并且獲取到分析結(jié)果之后,我們通常不會直接輸出結(jié)果,因為這樣的結(jié)果是以數(shù)組形式組織的,看起來并不直觀,幸運的是,xhprof提供了基于web的圖形界面對分析結(jié)果進行查看。
在使用之前,請先確保服務(wù)器安裝了graphviz工具,否則在生成監(jiān)控圖表的時候回出現(xiàn)以下錯誤:
failed to execute cmd: " dot -Tpng". stderr: `sh: dot: command not found "
這里提示找不到dot命令,所以需要先安裝graphviz
$ sudo yum install graphviz
由于分析結(jié)果的查看工具是基于web的,因此,我們需要將xhprof安裝包中的xhprofhtml和xhproflib目錄放到服務(wù)器的web目錄下,讓xhprof_html目錄中的內(nèi)容對外可以訪問。
比如我的測試服務(wù)器環(huán)境是使用vagrant搭建的Cent OS,我見過這兩個目錄放到/vagrant/xhprof目錄下:
[vagrant@localhost xhprof]$ pwd /vagrant/xhprof [vagrant@localhost xhprof]$ ls xhprof_html xhprof_lib
web服務(wù)器使用的是Nginx,因此,在Nginx的配置文件nginx.conf中的配置如下:
server { listen 80; server_name _; root /vagrant; ...
web服務(wù)器的根目錄是/vagrant,因此訪問地址為http://localhost/xhprof/xhprof_html/index.php.
當然,配置好環(huán)境之后,我們還是獲取不到分析結(jié)果的,因為我們在代碼中并沒有將分析結(jié)果保存到xhprof.output_dir指定的目錄中。
因此,我們需要修改我們的代碼,是其能夠?qū)⒎治鼋Y(jié)果存放到xhprof.output_dir指定的目錄中。
.... $xhprofData = xhprof_disable(); require "/vagrant/xhprof/xhprof_lib/utils/xhprof_lib.php"; require "/vagrant/xhprof/xhprof_lib/utils/xhprof_runs.php"; $xhprofRuns = new XHProfRuns_Default(); $runId = $xhprofRuns->save_run($xhprofData, "xhprof_test"); echo "http://localhost/xhprof/xhprof_html/index.php?run=" . $runId . "&source=xhprof_test";
變量$runId是本次請求生成分析結(jié)果的id,最后我們輸出了一個鏈接地址,使用改地址就可以看到本次請求的分析結(jié)果。
注意到中間的View Full Callgraph鏈接,通過該鏈接我們可以看到圖形化的分析結(jié)果。
圖中紅色的部分為性能比較低,耗時比較長的部分,我們可以根據(jù)根據(jù)哪些函數(shù)被標記為紅色對系統(tǒng)的代碼進行優(yōu)化
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://www.ezyhdfw.cn/yun/21084.html
摘要:輸出的性能數(shù)據(jù)中添加數(shù)據(jù)。中間是要分析的代碼。是一個繪制圖形的工具,可以更為直觀的讓你查看性能的瓶頸。這樣所有使用該環(huán)境的都會生效。這樣僅該項目生效。 安裝xhprof擴展 wget http://pecl.php.net/get/xhprof-0.9.4.tgz tar zxf xhprof-0.9.4.tgz cd xhprof-0.9.4/extension/ sudo phpi...
摘要:上一篇文章里,我們介紹了如何基于擴展來分析性能,并記錄到日志里,最后使用擴展自帶的在里展示出來。本次測試中,實際使用了擴展切換為擴展后里看不到數(shù)據(jù),原因未知。雖然來自但已經(jīng)很久不更新,官方源已經(jīng)顯示此包已廢棄,不再維護。 上一篇文章里,我們介紹了如何基于xhprof擴展來分析PHP性能,并記錄到日志里,最后使用xhprof擴展自帶的UI在web里展示出來。本篇文章將講述2個知識點: ...
toolkit是tideway官方提供的性能分析的命令行工具。如果你只是本地開發(fā)調(diào)試接口性能,不想安裝xhgui,那么使用toolkit就足夠了 安裝 安裝tideways拓展 git clone https://github.com/tideways/php-xhprof-extension.git cd php-profiler-extension phpize ./configure mak...
摘要:它報告函數(shù)級別的請求次數(shù)和各種指標,包括阻塞時間,時間和內(nèi)存使用情況。它獨有的數(shù)據(jù)計算的報告后處理階段。在數(shù)據(jù)收集時,通過檢測循環(huán)來處理遞歸的函數(shù)調(diào)用,并通過給遞歸調(diào)用中每個深度的調(diào)用一個有用的命名來避開死循環(huán)。 簡介 XHProf是一個分層PHP性能分析工具。XHProf是一個分層PHP性能分析工具。它報告函數(shù)級別的請求次數(shù)和各種指標,包括阻塞時間,CPU時間和內(nèi)存使用情況。一個函數(shù)...
摘要:注這是我們應(yīng)用性能分析系列的第一篇,閱讀第二篇可深入了解,第三篇則關(guān)注于性能調(diào)優(yōu)實踐。性能分析的行為也會影響應(yīng)用性能。主動被動性能分析主動分析器在開發(fā)過程中使用,由開發(fā)人員啟用。它對性能的影響最小,同時收集足夠的信息用于診斷性能問題。 注:這是我們 PHP 應(yīng)用性能分析系列的第一篇,閱讀第二篇可深入了解 xhgui,第三篇則關(guān)注于性能調(diào)優(yōu)實踐。 什么是性能分析? 性能分析是衡量應(yīng)用程...
閱讀 1422·2021-10-08 10:05
閱讀 4234·2021-09-22 15:54
閱讀 3161·2021-08-27 16:18
閱讀 3160·2019-08-30 15:55
閱讀 1528·2019-08-29 12:54
閱讀 2805·2019-08-26 11:42
閱讀 635·2019-08-26 11:39
閱讀 2186·2019-08-26 10:11