PHP调优之火焰图

Posted by 张晨 on February 24, 2022

本次使用的工具是Xdebug+FlameGraph

环境准备

这次演示我就使用我最熟悉的yii2来做演示了。

安装yii2

如果一切顺利的话,你不会遇到问题。 你也可以使用自己熟悉的框架或者项目。只要能启动就行

1
2
3
4
5
6
7
# composer安装yii2
composer create-project --prefer-dist yiisoft/yii2-app-basic yii2

cd yii2

# 运行Yii2
php yii serve

在浏览器访问http://localhost:8080/。看效果

开启Xdebug

怎么安装Xdebug?

简单一点,你可以这样安装。pecl install xdebug-2.9.8

查看php配置文件在哪里?

1
php --ini

这样可以看到你的PHP配置文件在什么目录下。

Xdebug配置如下

1
2
3
4
5
6
7
8
9
10
11
zend_extension="xdebug.so"
# 自动开启
xdebug.auto_trace = On
# 触发启动trace
xdebug.trace_enable_trigger = On
xdebug.trace_enable_trigger_value = "xdebug"
# 输出内容保存目录
xdebug.trace_output_dir = /var/tmp/
xdebug.trace_output_name = trace.%t.%s
xdebug.trace_format = 1
xdebug.trace_options = 0

你可以运行 php --ri xdebug确认你是否已经成功配置

下载FlameGraph工具

1
2
3
4
git clone https://github.com/brendangregg/FlameGraph.git


cd FlameGraph

在目录下面有两个文件是我们这次需要使用到的。介绍一下

  • stackcollapse-xdebug.php

这是将PHP Xdebugtrace信息折叠成单行。

  • flamegraph.pl

Use flamegraph.pl to render a SVG.

使用这个文件将折叠之后的文件,渲染成为SVG文件。给我们查看

生成火焰图

  • 运行yii2项目
    1
    
    php yii serve
    
  • 访问PHP代码。生成trace数据

在浏览器访问http://localhost:8080/

  • 查看是否生成了trace信息文件
    1
    
    ll /var/tmp
    

看看该目录下是否生成了race.****.xt的文件。

如果没有生成,请确认你开启了xdebug。且xdebug的配置正确。xdebug.trace_output_dir = /var/tmp/

如果你检查了还是没有生成文件。建议你换台电脑。

  • 使用stackcollapse-xdebug折叠trace信息

确保你在FlameGraph项目目录下

1
2
3
4
5
# 折叠代码 请把下面的文件改成自己的trace文件
./stackcollapse-xdebug.php /var/tmp/trace.修改我.xt > out.folded

# 渲染SVG
./flamegraph.pl out.folded > test.svg

完美。你如果和我一样聪明。我认为你应该也成功生成了SVG出来了。

参考文档