openresty 火焰图收集

匿名 (未验证) 提交于 2019-12-03 00:15:02

注:本次安装以下都是基于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

  1. sample-bt

    注:-t 5,指采集5s的数据,下同
  2. sample-bt-off-cpu
    例:./sample-bt-off-cpu -p 10901 -t 5 > a.bt
  3. ngx-sample-lua-bt

  4. https://github.com/openresty/openresty-systemtap-toolkit#tools

2、stapxx(有很多与openresty-systemtap-toolkit功能相似的命令

  1. lua代码级别的on-CPU火焰图工具,lua层面上分析CPU时间 (要求:LuaJIT 2.1

    参考ngx-sample-lua-bt的介绍

  2. 在采用周期对基于未释放的glibc内置项(malloc、calloc、realloc)的内存分配进行采样
  3. 更多其他应用请参考: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

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!