火焰图安装&使用
1.环境
centos 7 – 一个空的bcc
2核4G内存 太低配置跑不起来!!!!><
2.安装systemtap流程
- 安装
systemtap systemtap-runtime
,直接用yum install systemtap systemtap-runtime
; -
安装kernel-debuginfo和kernel-debuginfo-common;
- 查看相关版本 yum --enablerepo=*-debuginfo --showduplicates list kernel kernel-devel kernel-debuginfo
- 查看系统版本 uname -r
- 使用对应的版本安装 (我的是3.10.0-693.21.1.el7 ) – 这个安装很耗时。。
yum --enablerepo=*-debuginfo install kernel-debuginfo-3.10.0-693.21.1.el7.x86_64 kernel-devel-3.10.0-693.21.1.el7.x86_64 systemtap
- 验证安装是否成功 stap -v -e 'probe vfs.read {printf("read performed\n"); exit()}'
- 成功会有Pass1-Pass5输出
- 这里如果没有成功 使用 rpm -qa|grep kernel 进行比对版本是否正确,不正确在重新rpm卸载安装
3.安装工具流程
- 下载nginx-systemtap-toolkit 并解压
- 下载FlameGraph火焰图生成工具 并解压
-
使用流程
- 找到要监控的pid 方法 (1)lsof -i:8088 – 端口 (2)ps -aux | grep
-
采样信息
- cd 到 openresty-systemtap-toolkit 目录下 (cd /root/tool/openresty-systemtap-toolkit)
- 执行 sudo ./sample-bt -p 10673 -t 60 -u > /tmp/nginx.bt (这里的目录是绝对路径)
-
把前面采样到的信息绘制成火焰图
- cd 到FlameGraph 目录下 (cd /root/tool/FlameGraph-master )
- 执行 sudo ./stackcollapse-stap.pl /tmp/nginx.bt > /tmp/nginx.cbt
- 执行 sudo ./flamegraph.pl /tmp/nginx.cbt > /tmp/nginx.svg
- 将生成的svg 用浏览器打开 – 可以sz 下来 或者放在samba共享文件里
4.整体压测&结果
过程不便于贴出~~~
测试:ab 压测 10并发 2核 - 测试Unauthorized
ab -n 2000 -c 10 -H 'Content-type: application/json' -H 'x-user-id:00dc1b52d8354d9193536e4dd2c41ae6' -H 'x-app-id:25463c6f-d8ca-4fab-b193-1e704213dde2' -H 'x-request-id:request_id_random' -p a.post http://XXX/v1/chat
ab 压测 10并发/100 并发 2核
4.4 结论
- 整体都少有平峰状态,所以整体状态还好
- ngx_http 部分有明显屏峰状态 说明占用资源较多,可以继续优化。。 见下面5
5. Lua 模块
5.1 重新编译 安装openresty
- 采样lua层面的信息进行分析,在编译luaJIT的时候需要添加
CCDEBUG=-g
参数- make clean之后再重新 make CCDEBUG=-g,否则你的luajit将始终是未开启debuginfo状态
- https://github.com/openresty/stapxx/issues/17
- 步骤:
- 进入到openresty 依赖的luaJIT 目录 之后执行 make clean & make CCDEBUG=-g
- 重新源码编译openresty 加入
./configure --with-openssl=$rpath/lib/openssl-${OPENSSL_VERSION} --prefix=$rpath/output --with-http_ssl_module --with-luajit --with-http_v2_module --with-debug -j2
-
- 如果遇到相关的说明没有安装 那就去yum 安装
- 使用重新编译好的ngnix 启动
5.2 lua火焰图生成
使用 lj-lua-stacks.sxx抓取栈信息,并用openresty-systemtap-toolkit 下的 fix-lua-bt 工具处理:
安装方式 也是是wget 下来 之后解压缩,每次去相应目录下使用。
使用流程
- 找到要监控的pid 方法 (1)lsof -i:8088 – 端口 (2)ps -aux | grep
-
采样信息
- cd 到 stapxx-master 目录下 (cd /root/tool/stapxx-master)
- 加环境变量 export PATH=$PWD:$PATH
- 采集 ./samples/lj-lua-stacks.sxx --arg time=30 --skip-badvars -x 7063 > /tmp/lua.bt (7063时找到端口)
-
fix lua bt
- cd到openresty-systemtap-toolkit 目录下
- 执行 ./fix-lua-bt /tmp/lua.bt > /tmp/a_lua.bt
-
把前面采样到的信息绘制成火焰图
- cd 到FlameGraph 目录下 (cd /root/tool/FlameGraph-master )
- 执行 ./stackcollapse-stap.pl /tmp/a_lua.bt > /tmp/lua_nginx.cbt
- 执行 ./flamegraph.pl /tmp/lua_nginx.cbt > /tmp/lua_nginx.svg
- 将生成的svg 用浏览器打开 – 可以sz 下来 或者放在samba共享文件里
5.4 lua火焰图分析
问题就可以基本定位了。。。
在有请求时 基本的火焰图为 ab_lua_normal.svg
很明显大多数的在
继续优化优化。