PHP / wordpress · 2023年4月17日 0

使用 xhprof 对php代码进行性能分析

背景:在日常开发中除了要让功能正常使用外,性能也是非常重要的,在java项目中可以使用 代码优化检测器(arthas-boot.jar ) 来进行接口或代码性的能分析 非常简单方便且体验较好,但在php中就会麻烦一些了,我找了一些资料主要靠谱的分两种方式如下:

1.使用xdebug 大致思路安装xdebug后 配置php.ini 中xdebug.model调整为profile及生成文件路径等参数后 带着指定query参数请求会生成配置文件,还要下载专门的查看工具 Installation · jokkedk/webgrind 这个我无论如何都没成功生成报告文件,后面有空在尝试

2.使用 xhprof 进行分析:

①下载:点击下载dll xhprof

②配置:下载后在本地安装 之后在php.ini配置

zend_extension:指向点击下载dll下载的php_xhprof.dll文件

xhprof.output_dir:指向 xhprof 下载的项目根目录

[xhprof]
extension=php_xhprof.dll
zend_extension="D:\application\work_application\wamp\bin\php\php7.4.33\ext\php_xhprof.dll"
xhprof.output_dir="D:\application\work_application\wamp\www\debug\xhprof"

在本地搭建虚拟域名(我的是wamp+修改host)指向 xhprof 项目根目录 我这里设置的本地域名是 http://xhprof.com/

③引入自己项目

一开始想用composer引用,后来没找到合适的包,改成手动引用并增加命名空间,我用的wordpress别的项目也类似,下面是具体使用代码 :

   xhprof_enable(XHPROF_FLAGS_NO_BUILTINS +
            XHPROF_FLAGS_CPU +
            XHPROF_FLAGS_MEMORY);
        #自定义代码
        $res=UserService::getAll();

        $xhprof_data = xhprof_disable();


        include_once MARKETING_SITE_ASSETS_EXTENDS . "xhprof_lib/utils/xhprof_lib.php";
        include_once MARKETING_SITE_ASSETS_EXTENDS . "xhprof_lib/utils/xhprof_runs.php";

        $xhprof_runs = new XHProfRuns_Default();
        $run_id = $xhprof_runs->save_run($xhprof_data, "xhprof_foo");

        //红色部分是自己配置的虚拟域名
        echo "---------------\n".
            "Assuming you have set up the http based UI for \n".
            "XHProf at some address, you can view run at \n".
            "http://xhprof.com/index.php?run=$run_id&source=xhprof_foo\n".
            "---------------\n";

中间的

$res=UserService::getAll();

可以替换成其他想查看性能的代码

 include_once MARKETING_SITE_ASSETS_EXTENDS . "xhprof_lib/utils/xhprof_lib.php";
 include_once MARKETING_SITE_ASSETS_EXTENDS . "xhprof_lib/utils/xhprof_runs.php";

上面自己设置路径能访问到即可,注意文件内要自己加命名空间,否则报not fount Class error

④访问该方法->生成报告文件->通过上面自定义的本地虚拟域名http://xhprof.com/ 访问->查看报告

1)访问该方法,方法返回如下:

复制上图中地址并访问即可看到报告

点击[View Full Callgraph]即可看到视图版本

可以看到其中红色的部分就是主要性能瓶颈,针对修改即可

⑤可能遇到的问题

1)windows点击查看视图可能会报失败dot相关错误,这是本地没安装python的画图包

参考这个文章 windows下Graphviz安装及入门教程

安装后本地环境变量path

D:\application\work_application\Graphviz\bin

即可