日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > php >内容正文

php

facebook工具xhprof的安装与使用-分析php执行性能

發(fā)布時間:2024/9/20 php 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 facebook工具xhprof的安装与使用-分析php执行性能 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

來源:http://www.cnblogs.com/wangtao_20/archive/2013/09/13/3320497.html

下載源碼包的網(wǎng)址
?
http://pecl.php.net/package/xhprof



上面說了,每個版本適用的php版本。


規(guī)劃(預(yù)先搞清楚思路)



一、這是一個php擴(kuò)展的形式。我們安裝gd2,curl都是php的擴(kuò)展形式。只不過有的時候編譯的時候就安裝進(jìn)去了。
像操作mysql數(shù)據(jù)庫,也是一個mysql.so這樣的擴(kuò)展,安裝了擴(kuò)展,就能調(diào)用mysql_query()這些函數(shù)。
要操作oracle數(shù)據(jù)庫,也有對應(yīng)的oracle擴(kuò)展加到php引擎中去。



現(xiàn)在要把xhprof擴(kuò)展加到php中去。


很久沒使用phpize安裝擴(kuò)展了。我自己忘得差不多了。于是重新去自己的博客找到以前寫的文章復(fù)習(xí)一下。

http://www.cnblogs.com/wangtao_20/archive/2011/03/16/1986508.html




ps:我也在思考,這個東西怎么這么容易忘記。我只知道他的作用。但是完全不記得他的操作步驟。要注意的細(xì)節(jié)。

看我得想辦法以通俗的方式來理解記住它。





二、php.ini需要進(jìn)行配置的項


[xhprof]
extension=xhprof.so;
; directory used by default implementation of the iXHProfRuns
; interface (namely, the XHProfRuns_Default class) for storing
; XHProf runs.
;
;xhprof.output_dir=<directory_for_storing_xhprof_runs>
;儲存 XHProf 運(yùn)行數(shù)據(jù)的默認(rèn)目錄
xhprof.output_dir=/tmp/xhprof



三、有了這個擴(kuò)展后,就能在自己的php代碼中調(diào)用這個擴(kuò)展內(nèi)置的函數(shù)來做性能監(jiān)控了,像下面這樣子


xhprof_enable(XHPROF_FLAGS_CPU + XHPROF_FLAGS_MEMORY);

................這里是要被監(jiān)控的代碼塊


$data = xhprof_disable();

include_once "xhprof_lib/utils/xhprof_lib.php"; ?
include_once "xhprof_lib/utils/xhprof_runs.php"; ?
$objXhprofRun = new XHProfRuns_Default();//數(shù)據(jù)會保存在php.ini中xhprof.output_dir設(shè)置的目錄去中?
$run_id = $objXhprofRun->save_run($data, "test");


=====================================================

幾個擴(kuò)展函數(shù)如下




步驟實施


1、先找到我服務(wù)器上php的安裝目錄,phpize一般都是在安裝目錄中,如下:

/usr/local/php/bin/phpize

2、找出php-config在哪個目錄(下面會用到),我的服務(wù)器在:

/usr/local/php/bin/php-config

目的:在下面進(jìn)行編譯的時候,會用到這個文件

./configure --with-php-config=/usr/local/php/bin/php-config



3、找到我服務(wù)器上php擴(kuò)展在哪個目錄,不確定的話,我覺得去php.ini中也能看到,如下


extension_dir = "/usr/local/php/lib/php/extensions/no-debug-non-zts-20060613/" 這個路徑感覺有點(diǎn)長。不用去改了php.ini中的設(shè)置,目前我覺得沒必要(商業(yè)與時間成本,這部分還不是制約因素)。按原來的繼續(xù)放擴(kuò)展。




現(xiàn)在知道擴(kuò)展目錄為:/usr/local/php/lib/php/extensions/no-debug-non-zts-20060613/

也就是說,我要把xhprof的源碼包解壓到這個目錄下去(解壓后會生成一個新的文件夾)。


那我就要去這個目錄下運(yùn)行phpize(這樣方便在這個目錄下面生成configure文件),

phpize的特點(diǎn):在a目錄下運(yùn)行phpize,就會在a目錄下生成configure。











得到上面路徑,shell命令實踐



cd? /usr/local/php/lib/php/extensions/no-debug-non-zts-20060613/

解壓下載到的xhprof壓縮包(我不是通過wget下載的,我是把這個壓縮直接通過ftp上傳到no-debug-non-zts-20060613目錄中去)。



tar zxf xhprof-0.9.3.tgz?????????????? #解壓后,里面有個extension文件夾,進(jìn)入里面去(目的是進(jìn)入里面去運(yùn)行phpize),解壓后的目錄結(jié)構(gòu)如下

?




cd xhprof-0.9.3/extension/??????????? #切換到這個擴(kuò)展的源碼目錄去

在這個目錄下面運(yùn)行phpize,就會在extension目錄下生成一個configure文件(這是phpize的機(jī)制)


/usr/local/php/bin/phpize
??
去看一下擴(kuò)展目錄,會發(fā)現(xiàn)在extension目錄生成了一個configure文件。運(yùn)行它


======================================


./configure --with-php-config=/usr/local/php/bin/php-config #用到了前面找到的php-config文件。

make && make install

make test
======================================




運(yùn)行成功后,會提示生成的xhprof.so文件在哪個位置,提示信息:

Libraries have been installed in:
?? /usr/local/php/lib/php/extensions/no-debug-non-zts-20060613/xhprof-0.9.3/extension/modules


這個目錄下已經(jīng)存在一個文件:
/usr/local/php/lib/php/extensions/no-debug-non-zts-20060613/xhprof.so

?

?



剛才生成了xhprof.so這個模塊文件,現(xiàn)在要在php.ini中加載剛才生成xhprof.so模塊才能生效:

[xhprof]
extension=xhprof.so;
; directory used by default implementation of the iXHProfRuns
; interface (namely, the XHProfRuns_Default class) for storing
; XHProf runs.
;
;xhprof.output_dir=<directory_for_storing_xhprof_runs>
xhprof.output_dir=/tmp/xhprof






平滑重新加載php.ini文件:/usr/local/php/sbin/php-fpm reload
提示:

Reload service php-fpm? done

說明成功。

現(xiàn)在去phpinfo中看xhprof擴(kuò)展是否加載成功了






安裝作圖工具(選填,可以后續(xù)再安裝)

yum install -y graphviz





================================================

工具的使用實踐

================================================

?

index.php中的代碼:

?

<?php
error_reporting(-1);


xhprof_enable(XHPROF_FLAGS_CPU + XHPROF_FLAGS_MEMORY);
?
$begin_time = microtime_float();




///統(tǒng)計執(zhí)行速度代碼
$end_time = microtime_float();

$exec_time? = $end_time-$begin_time;

//@save_stat($exec_time);

for($i=0;$i<10;$i++){


for($j=0;$j<10;$j++){

}

}



$data = xhprof_disable();

include_once "xhprof_lib/utils/xhprof_lib.php";//從源碼包中拷貝xhprof_lib這個文件夾過來直接可以調(diào)用
include_once "xhprof_lib/utils/xhprof_runs.php"; ?
$objXhprofRun = new XHProfRuns_Default();//數(shù)據(jù)會保存在php.ini中xhprof.output_dir設(shè)置的目錄去中?
$run_id = $objXhprofRun->save_run($data, "test");
//第二個參數(shù)是定義文件名稱。名稱如果為"xhprof",則在xhprof.output_dir設(shè)置的目錄生成的文件:522ab85f40229.xhprof.xhprof。
//格式為:"id標(biāo)識.組名稱.xhprof",id標(biāo)識就是$run_id得到的結(jié)果。

//id標(biāo)識是每次運(yùn)行的時候就生成一個新的標(biāo)識,也就是生成一個新的文件,記錄每次運(yùn)行的數(shù)據(jù)





var_dump($run_id);

echo "http://www.xxxx.com/xhprof_html/index.php?run={$run_id}&source=test\n";//source的值必須是save_run中指定的名稱。這個其實就是根據(jù)編號和名稱才能定位到對應(yīng)的文件"522ab85f40229.xhprof.xhprof"

//將這個地址輸出來,是為了直接可以去查看分析結(jié)果。




function save_stat($time)
{
?? ?static $call_count=1;
?? ?$call_limit = 10;
?? ?if(!$time) return ;
??????? $date = date("Y-m-d");//暫時按照天來生成文件。方便查閱
?? ?$exec_stat_file = './exec_stat'.DIRECTORY_SEPARATOR."exec_stat_file-".$date.".txt";
?? ?$fp = fopen($exec_stat_file,'ab');
?? ?if(flock($fp,LOCK_EX))
?? ?{
?? ??? ?$s = 'access:'.date("Y-m-d H:i:s").',execute time:'.$time.'s,request_url:http://'.$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI']."||".PHP_EOL;
?? ???? fwrite($fp,$s);
?? ???? flock($fp,LOCK_UN);
?? ?}else{
?? ??? ?usleep(1000);
?? ??? ?if($call_count<$call_limit)
?? ??? ?{
?? ??? ??? ?$call_count++;
?? ??? ???? save_stat($time);
?? ??? ?}
?? ?}

?? ?@fcolse($fp);
?? ?//var_dump($fp);

}
function microtime_float()
{
??? list($usec, $sec) = explode(" ", microtime());
??? return ((float)$usec + (float)$sec);
}
?>

?

加粗的黑體,就是分析用到的代碼。

其中用到了源碼包中的xhprof_lib中的代碼,代碼中"XHProfRuns_Default"這個類就是里面的。

?

?

生成了分析結(jié)果后,現(xiàn)在可以去使用源碼包中提供的web版的工具查看了。

?

xhprof_html這個文件夾隨便放到哪里,只要放到能夠通過web訪問的目錄下即可,不過這個里面會用到xhprof_lib中的類,所以還是一起復(fù)制過去,跟源碼包中保持一樣的結(jié)構(gòu)才好。xhprof_html與xhprof_lib要保持平行

?

我這里,這個工具的訪問方式是:http://www.xxxx.com/xhprof_html/index.php?run=xxx&source=xxx\n

source的值必須是save_run中指定的名稱。這個其實就是根據(jù)編號和名稱才能定位到對應(yīng)的文件"522ab85f40229.xhprof.xhprof"

訪問看到的結(jié)果如下

?

?

?

?

圖中,紅色的表示最耗費(fèi)性能的,黃色的其次。

?

?

只了解這么多了。具體的分析結(jié)果怎么看,在文件夾xhprof_html中有個docs目錄,里面是說明文檔。說了一些專用術(shù)語的定義

?

注意點(diǎn):在php.ini中xhprof.output_dir設(shè)置的目錄,要自己手動去創(chuàng)建。這個工具不會自動去創(chuàng)建。沒有該文件夾。就不會生成。另外,在linux下還要保證權(quán)限設(shè)置好,我設(shè)置的屬主是www就可以用了。

?

?

?單位:1s(秒)=1000ms(毫秒)

?

?

?

?

?官方解釋

  • Inclusive Time (or Subtree Time): Includes time spent in the function as well as in descendant functions called from a given function.
  • Exclusive Time/Self Time: Measures time spent in the function itself. Does not include time in descendant functions.
  • Wall Time: a.k.a. Elapsed time or wall clock time.
  • CPU Time: CPU time in user space + CPU time in kernel space
  • Exclusive Time表示函數(shù)本身的執(zhí)行時間。這個時間并不包含里面調(diào)用其他函數(shù)的耗時(其實就是去掉里面其他函數(shù)的耗時,因為函數(shù)里面調(diào)用到的函數(shù)也會進(jìn)行單獨(dú)統(tǒng)計)。

    Inclusive Time則是包括了里面調(diào)用的子函數(shù)時間(descendant functions)

    所以,我的理解是Exclusive Time<=Inclusive Time


    總結(jié)

    以上是生活随笔為你收集整理的facebook工具xhprof的安装与使用-分析php执行性能的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。