openresty 火焰图
安装环境
操作系统:CentOS Linux release 7.6.1810 (Core)
openresty:nginx version: openresty/1.15.8.2
安装流程
1. 查看操作系统发行编号
[root@local FlameGraph]# uname -r
3.10.0-1127.13.1.el7.x86_64
2. 下载相关工具包
包名 | 地址 |
---|---|
kernel-debuginfo-common-$(uname -r).rpm | http://linuxsoft.cern.ch/centos-debuginfo/7/x86_64/ |
kernel-debuginfo-$(uname -r).rpm | http://debuginfo.centos.org/7/x86_64/ |
kernel-devel-$(uname -r).rpm | http://rpm.pbone.net/ |
若下载地址速度慢或没有对应版本的包请自行搜索
3. 安装工具包
[root@local FlameGraph]# rpm -ivh kernel-debuginfo-common-x86_64-3.10.0-1127.13.1.el7.x86_64.rpm
[root@local FlameGraph]# rpm -ivh kernel-debuginfo-3.10.0-1127.13.1.el7.x86_64.rpm
[root@local FlameGraph]# rpm -ivh kernel-devel-3.10.0-1127.13.1.el7.x86_64.rpm
4. 安装systemtap
[root@local FlameGraph]# yum install systemtap -y
5. 验证systemtap是否可用
[root@local FlameGraph]# stap -v -e 'probe vfs.read {printf("read performed\n"); exit()}'
如上验证通过。
6. 下载火焰图绘制工具
[root@local FlameGraph]# git clone https://github.com/openresty/nginx-systemtap-toolkit.git
[root@local FlameGraph]# git clone https://github.com/brendangregg/FlameGraph.git
7. 绘制火焰图
(1) 通过另一台服务器对openresty进行压测,推荐使用wrk
wrk -t16 -c300 -d30s http://www.testsites.com/
(2)查看nginx进程编号
[root@local FlameGraph]# ps -ef | grep nginx
选择一个work进程就好
(3)抓取堆栈信息绘制火焰图
[root@local FlameGraph]# ./openresty-systemtap-toolkit-master/ngx-sample-lua-bt -p 7617 --luajit20 -t 10 >nginx.bt
[root@local FlameGraph]# ./openresty-systemtap-toolkit-master/fix-lua-bt nginx.bt > flame.bt
[root@local FlameGraph]# ./FlameGraph-master/stackcollapse-stap.pl flame.bt > flame.cbt
[root@local FlameGraph]# ./FlameGraph-master/flamegraph.pl flame.cbt > flame.svg
其中:
ngx-sample-lua-bt 用来抓取lua级别的运行堆栈
sample-bt 用来抓取C级别的运行堆栈 (抓取C堆栈时,fix-lua-bt不需要执行)
flame.svg即为生成的火焰图,直接用浏览器打开即可
注意事项
openresty/1.15.8.1及之后的版本在x86_64体系结构中默认开启了luajit的gc64,而ngx-sample-lua-bt不支持,需要将其关掉,否者会出错,如下:
因此在编译安装openresty时添加 --without-luajit-gc64选项
另,openresty官方提供了一款商用版本的性能分析工具XRay支持gc64,可申请试用。