注:本次安装以下都是基于centos6的
uname -a ; rpm -qa kernel\* | sort
相关rpm包下载:http://rpm.pbone.nethttp://debuginfo.centos.org
yum install systemtap
测试安装是否成功:
stap -v -e 'probe vfs.read {printf("read performed\n"); exit()}'
安装成功:
出现下面的情况,是kernel-devel不匹配导致的
kernel-debug 版本不匹配
https://github.com/openresty/openresty-systemtap-toolkit
https://github.com/openresty/stapxx
https://github.com/brendangregg/FlameGraph.git
1、openresty-systemtap-toolkit
- sample-bt
注:-t 5,指采集5s的数据,下同 - sample-bt-off-cpu
例:./sample-bt-off-cpu -p 10901 -t 5 > a.bt - ngx-sample-lua-bt
- https://github.com/openresty/openresty-systemtap-toolkit#tools
2、stapxx(有很多与openresty-systemtap-toolkit功能相似的命令)
- lua代码级别的on-CPU火焰图工具,lua层面上分析CPU时间 (要求:LuaJIT 2.1)
,参考ngx-sample-lua-bt的介绍
- 在采用周期对基于未释放的glibc内置项(malloc、calloc、realloc)的内存分配进行采样
- 更多其他应用请参考:https://github.com/openresty/stapxx#samples
cd /opt/stapxx
export PATH=$PWD:$PATH (可以加到环境变量里面)
收集内存:
收集cpu:
./samples/lj-lua-stacks.sxx --skip-badvars -x 12130 > /opt/flame_img/ngx_cpu_1.bt
注:里面目录是我的环境目录,可以放到任意目录,但是必须注意权限问题
可能遇到错误:
http://debuginfo.centos.org/6/x86_64/
cd ./FlameGraph
需安装openresty的debuginfo,否则会报错:
sudo yum install -y openresty-debug-debuginfo
y 轴表示调用栈,每一层都是一个函数。调用栈越深,火焰就越高,顶部就是正在执行的函数,下方都是它的父函数。
x 轴表示抽样数,如果一个函数在 x 轴占据的宽度越宽,就表示它被抽到的次数多,即执行的时间长。注意,x 轴不代表时间,而是所有的调用栈合并后,按字母顺序排列的。
火焰图就是看顶层的哪个函数占据的宽度最大。只要有"平顶"(plateaus),就表示该函数可能存在性能问题
注:颜色没有特殊含义
参考:http://www.ruanyifeng.com/blog/2017/09/flame-graph.html
来源:博客园
作者:钻牛角尖儿
链接:https://www.cnblogs.com/pk-tiger/p/11757716.html