成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

使用XHProf查找PHP性能瓶頸

Xufc / 854人閱讀

摘要:是開發(fā)的一個(gè)測(cè)試性能的擴(kuò)展,本文記錄了在應(yīng)用中使用對(duì)進(jìn)行性能優(yōu)化,查找性能瓶頸的方法。函數(shù)用于停止性能分析,并返回分析的數(shù)據(jù)。該參數(shù)用于為剖析結(jié)果添加額外的信息,該參數(shù)的值使用以下宏,如果需要提供多個(gè)值,使用進(jìn)行分隔。

XHProf是facebook 開發(fā)的一個(gè)測(cè)試php性能的擴(kuò)展,本文記錄了在PHP應(yīng)用中使用XHProf對(duì)PHP進(jìn)行性能優(yōu)化,查找性能瓶頸的方法。

安裝Xhprof擴(kuò)展
$ 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

配置中xhprof.output_dir指定了生成的profile文件存儲(chǔ)的位置,我們將其指定為/tmp。

對(duì)PHP進(jìn)行性能分析

在XHProf擴(kuò)展中,一共提供了四個(gè)函數(shù)用于對(duì)PHP進(jìn)行性能分析。

xhprof_enable/xhprof_sample_enable函數(shù)用于開始XHProf性能分析,區(qū)別在于前者功能更加強(qiáng)大,而后者則是是以簡(jiǎn)單模式啟動(dòng)性能分析(簡(jiǎn)單記錄了函數(shù)的調(diào)用棧信息),開銷比較小。

xhprof_disable/xhprof_sample_disable函數(shù)用于停止性能分析,并返回分析的數(shù)據(jù)。

需要特別說(shuō)明的函數(shù)是xhprof_enable,其他函數(shù)都是不需要提供參數(shù)的,而該函數(shù)則可以接受兩個(gè)可選的參數(shù),用于改變?cè)摴ぞ叩男袨椤?/p>

void xhprof_enable ([ int $flags = 0 [, array $options ]] )

flags 該參數(shù)用于為剖析結(jié)果添加額外的信息,該參數(shù)的值使用以下宏,如果需要提供多個(gè)值,使用|進(jìn)行分隔。

XHPROFFLAGSNO_BUILTINS 跳過(guò)所有的內(nèi)置函數(shù)

XHPROFFLAGSCPU 添加對(duì)CPU使用的分析

XHPROFFLAGSMEMORY 添加對(duì)內(nèi)存使用的分析

options 數(shù)組形式提供可選參數(shù),在此處提供ignored_functions選項(xiàng)需要忽略的函數(shù)

比如下面的例子,同時(shí)對(duì)內(nèi)存和CPU進(jìn)行分析,并且忽略對(duì)call_user_funccall_user_func_array函數(shù)的分析。

xhprof_enable(
    XHPROF_FLAGS_MEMORY|XHPROF_FLAGS_CPU,
    [
        "ignored_functions"    => [
            "call_user_func",
            "call_user_func_array"
        ]
    ]
);

// 這里是PHP代碼,比如業(yè)務(wù)邏輯實(shí)現(xiàn)等要被分析的代碼部分
....

$xhprofData = xhprof_disable();// $xhprofData是數(shù)組形式的分析結(jié)果
print_r($xhprofData);

注意,如果使用XHPROF_FLAGS_CPU選項(xiàng)對(duì)CPU占用也進(jìn)行分析,在Linux環(huán)境下,會(huì)造成比較高的系統(tǒng)負(fù)載,因此不建議使用,而推薦只使用XHPROF_FLAGS_MEMORY,對(duì)內(nèi)存的分析不會(huì)對(duì)系統(tǒng)造成太多負(fù)載。

形象化的查看分析結(jié)果

使用xhprof_disable完成性能分析并且獲取到分析結(jié)果之后,我們通常不會(huì)直接輸出結(jié)果,因?yàn)檫@樣的結(jié)果是以數(shù)組形式組織的,看起來(lái)并不直觀,幸運(yùn)的是,xhprof提供了基于web的圖形界面對(duì)分析結(jié)果進(jìn)行查看。

在使用之前,請(qǐng)先確保服務(wù)器安裝了graphviz工具,否則在生成監(jiān)控圖表的時(shí)候回出現(xiàn)以下錯(cuò)誤:

failed to execute cmd: " dot -Tpng". stderr: `sh: dot: command not found "

這里提示找不到dot命令,所以需要先安裝graphviz

$ sudo yum install graphviz

由于分析結(jié)果的查看工具是基于web的,因此,我們需要將xhprof安裝包中的xhprofhtmlxhproflib目錄放到服務(wù)器的web目錄下,讓xhprof_html目錄中的內(nèi)容對(duì)外可以訪問(wèn)。

比如我的測(cè)試服務(wù)器環(huán)境是使用vagrant搭建的Cent OS,我見過(guò)這兩個(gè)目錄放到/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,因此訪問(wèn)地址為http://localhost/xhprof/xhprof_html/index.php.

當(dāng)然,配置好環(huán)境之后,我們還是獲取不到分析結(jié)果的,因?yàn)槲覀冊(cè)诖a中并沒(méi)有將分析結(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是本次請(qǐng)求生成分析結(jié)果的id,最后我們輸出了一個(gè)鏈接地址,使用改地址就可以看到本次請(qǐng)求的分析結(jié)果。

注意到中間的View Full Callgraph鏈接,通過(guò)該鏈接我們可以看到圖形化的分析結(jié)果。

圖中紅色的部分為性能比較低,耗時(shí)比較長(zhǎng)的部分,我們可以根據(jù)根據(jù)哪些函數(shù)被標(biāo)記為紅色對(duì)系統(tǒng)的代碼進(jìn)行優(yōu)化

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/21084.html

相關(guān)文章

  • 使用XHProf分析PHP性能瓶頸(一)

    摘要:輸出的性能數(shù)據(jù)中添加數(shù)據(jù)。中間是要分析的代碼。是一個(gè)繪制圖形的工具,可以更為直觀的讓你查看性能的瓶頸。這樣所有使用該環(huán)境的都會(huì)生效。這樣僅該項(xiàng)目生效。 安裝xhprof擴(kuò)展 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...

    pkwenda 評(píng)論0 收藏0
  • 使用XHProf分析PHP性能瓶頸(二)

    摘要:上一篇文章里,我們介紹了如何基于擴(kuò)展來(lái)分析性能,并記錄到日志里,最后使用擴(kuò)展自帶的在里展示出來(lái)。本次測(cè)試中,實(shí)際使用了擴(kuò)展切換為擴(kuò)展后里看不到數(shù)據(jù),原因未知。雖然來(lái)自但已經(jīng)很久不更新,官方源已經(jīng)顯示此包已廢棄,不再維護(hù)。 上一篇文章里,我們介紹了如何基于xhprof擴(kuò)展來(lái)分析PHP性能,并記錄到日志里,最后使用xhprof擴(kuò)展自帶的UI在web里展示出來(lái)。本篇文章將講述2個(gè)知識(shí)點(diǎn): ...

    Worktile 評(píng)論0 收藏0
  • tideways+toolkit對(duì)php代碼進(jìn)行性能分析

    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...

    rubyshen 評(píng)論0 收藏0
  • xhprof使用

    摘要:它報(bào)告函數(shù)級(jí)別的請(qǐng)求次數(shù)和各種指標(biāo),包括阻塞時(shí)間,時(shí)間和內(nèi)存使用情況。它獨(dú)有的數(shù)據(jù)計(jì)算的報(bào)告后處理階段。在數(shù)據(jù)收集時(shí),通過(guò)檢測(cè)循環(huán)來(lái)處理遞歸的函數(shù)調(diào)用,并通過(guò)給遞歸調(diào)用中每個(gè)深度的調(diào)用一個(gè)有用的命名來(lái)避開死循環(huán)。 簡(jiǎn)介 XHProf是一個(gè)分層PHP性能分析工具。XHProf是一個(gè)分層PHP性能分析工具。它報(bào)告函數(shù)級(jí)別的請(qǐng)求次數(shù)和各種指標(biāo),包括阻塞時(shí)間,CPU時(shí)間和內(nèi)存使用情況。一個(gè)函數(shù)...

    darryrzhong 評(píng)論0 收藏0
  • PHP 性能分析第一篇: Xhprof & Xhgui 介紹

    摘要:注這是我們應(yīng)用性能分析系列的第一篇,閱讀第二篇可深入了解,第三篇?jiǎng)t關(guān)注于性能調(diào)優(yōu)實(shí)踐。性能分析的行為也會(huì)影響應(yīng)用性能。主動(dòng)被動(dòng)性能分析主動(dòng)分析器在開發(fā)過(guò)程中使用,由開發(fā)人員啟用。它對(duì)性能的影響最小,同時(shí)收集足夠的信息用于診斷性能問(wèn)題。 注:這是我們 PHP 應(yīng)用性能分析系列的第一篇,閱讀第二篇可深入了解 xhgui,第三篇?jiǎng)t關(guān)注于性能調(diào)優(yōu)實(shí)踐。 什么是性能分析? 性能分析是衡量應(yīng)用程...

    RdouTyping 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<