如何优雅的使用XHProf

如何优雅的使用XHProf

          • 1、安装xhprof扩展。编译安装不再此赘述。
          • 2、优雅的在本地或线上使用XHProf。
          • 3、调用。
          • 4、PHP_ini配置。
          • 5、关于分析结果的描述。

1、安装xhprof扩展。编译安装不再此赘述。
2、优雅的在本地或线上使用XHProf。


namespace Blt\Domain\Service;

class PerformanceAnalysis extends BaseService
{
    public $start_time = 0;

    /**
     * @return int
     */
    public function getStartTime()
    {
        return $this->start_time;
    }

    /**
     * @param int $start_time
     * @return PerformanceAnalysis
     */
    public function setStartTime($start_time)
    {
        $this->start_time = $start_time;
        return $this;
    }

    /**
     * 开始执行分析
     * @author YC 
     * DateTime: 2020/3/10 0010 下午 3:09
     */
    public function enableXhprof()
    {
        if (BLT_ONLINE) { //线上
            if (mt_rand(1, 10000) == 1) { //采集请求的万分之一
                //xhprof_enable(XHPROF_FLAGS_MEMORY);//生产环境尽量不要统计CPU信息啊
                xhprof_enable();
                $xhprof_on = true;
            }
        } else {
            xhprof_enable(XHPROF_FLAGS_CPU + XHPROF_FLAGS_MEMORY);
        }
        $temp_time = $this->msectime();
        $this->setStartTime($temp_time);
        \Blt\Domain\Service\LogService::writeLine('PerformanceAnalysis', '开始时间:' . date('Y-m-d H:i:s'));
    }

    /**
     * 结束分析并生成分析报告
     * @author YC 
     * DateTime: 2020/3/10 0010 下午 3:09
     * 访问地址  Server/xhprof/xhprof_html/
     */
    public function disableXhprof()
    {
        $xhprof_data = xhprof_disable();
        $XHPROF_ROOT = '/xhprof';  //xhprof 展示文件路径
        require_once($XHPROF_ROOT . '/xhprof_lib/utils/xhprof_lib.php');
        require_once($XHPROF_ROOT . '/xhprof_lib/utils/xhprof_runs.php');
        $xhprof_runs = new \XHProfRuns_Default();
        $run_id = $xhprof_runs->save_run($xhprof_data, "xhprof_foo");
        $end_time = $this->msectime();
        $use_time = $end_time - $this->getStartTime();
        \Blt\Domain\Service\LogService::writeLine('PerformanceAnalysis', '$run_id:' . $run_id . '  程序耗时:' . $use_time . ' 毫秒。');
    }

    /**
     * 获取
     * @return float
     * @author YC 
     * DateTime: 2020/3/10 0010 下午 3:56
     */
    private function msectime()
    {
        list($msec, $sec) = explode(' ', microtime());
        $msectime = (float)sprintf('%.0f', (floatval($msec) + floatval($sec)) * 1000);
        return $msectime;
    }


}  //bottom
3、调用。
\Blt\Domain\Service\PerformanceAnalysis::getInstance()->enableXhprof();
\Blt\Domain\Service\ShowService::getInstance()->compute($sub_id);  //要分析测试的部分
\Blt\Domain\Service\PerformanceAnalysis::getInstance()->disableXhprof();
4、PHP_ini配置。
[xhprof]
extension=xhprof.so
xhprof.output_dir=/xhprof/save_output_dir  //保存分析结果文件的路径,需要有此文件夹。最好在xhprof文件路径下

保存结果的文件路径

5、关于分析结果的描述。

输出结果的含义
ct 函数调用次数,
wt 花费的时间,
cpu 花费的 CPU 时间(微秒即百万分之一秒),
mu 使用的内存(bytes),
pmu 使用的内存峰值(bytes)

web 分析结果页面含义:
Calls:函数的调用次数
Incl. Wall Time (microsec) :包含内部函数花费的时间,单位微秒
Excl. Wall Time (microsec):不包含内部函数花费的时间,单位微秒
及所占百分比(%)
注:Incl.:为 Including 包含的简写
Excl.:为 Excluding 不包含的简写
Wall Time:意为挂钟时间即任务花费的时间
main():一个虚构的函数,程序根节点
bar@2:递归调用 2 次

Incl. CPU (microsecs):包含内部函数 CPU 花费的时间,单位微秒 Excl. CPU
(microsec):不包含内部函数 CPU 花费的时间,单位微秒 Incl. MemUse (bytes):包含内部函数所占内存,单位字节
Excl. MemUse (bytes):不包含内部函数所占内存,单位字节 Incl. PeakMemUse
(bytes):包含内部函数所占内存峰值,单位字节 Excl. PeakMemUse (bytes):不包含内部函数所占内存峰值,单位字节
及所占百分比(%) 可以认为共三种情况:

  1. 包括内部函数
  2. 不包括内部函数或者说函数本身
  3. 所占总数(时间或内存使用)的百分比

你可能感兴趣的:(php)