本次使用的工具是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 Xdebug
的trace
信息折叠成单行。
- 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出来了。
参考文档
- https://github.com/jokkedk/webgrind
- https://daniellockyer.com/php-flame-graphs/
- https://github.com/brendangregg/FlameGraph
- https://kcachegrind.github.io/html/Documentation.html
- https://xdebug.org/docs/profiler
- https://stackoverflow.com/questions/27038356/how-to-generate-flame-graphs-with-php