火焰图安装&使用

时间:2024-05-21 13:09:50

火焰图安装&使用

 

1.环境

centos 7  – 一个空的bcc

2核4G内存  太低配置跑不起来!!!!><

2.安装systemtap流程

  1. 安装systemtap systemtap-runtime,直接用yum install systemtap systemtap-runtime 
  2. 安装kernel-debuginfo和kernel-debuginfo-common;
    1. 查看相关版本 yum --enablerepo=*-debuginfo --showduplicates list kernel kernel-devel kernel-debuginfo
    2. 查看系统版本 uname -r
    3. 使用对应的版本安装 (我的是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

  1. 验证安装是否成功 stap -v -e 'probe vfs.read {printf("read performed\n"); exit()}'  
    1. 成功会有Pass1-Pass5输出
    2.  这里如果没有成功 使用 rpm -qa|grep kernel 进行比对版本是否正确,不正确在重新rpm卸载安装

3.安装工具流程

  1. 下载nginx-systemtap-toolkit 并解压 
  2. 下载FlameGraph火焰图生成工具 并解压
  3. 使用流程
    1. 找到要监控的pid  方法 (1)lsof -i:8088 – 端口   (2)ps -aux | grep
    2. 采样信息
      1. cd 到 openresty-systemtap-toolkit 目录下  (cd  /root/tool/openresty-systemtap-toolkit) 
      2. 执行   sudo ./sample-bt -p 10673 -t 60 -u > /tmp/nginx.bt  (这里的目录是绝对路径)
    3. 把前面采样到的信息绘制成火焰图
      1. cd 到FlameGraph 目录下 (cd  /root/tool/FlameGraph-master )
      2. 执行 sudo ./stackcollapse-stap.pl /tmp/nginx.bt > /tmp/nginx.cbt
      3. 执行 sudo ./flamegraph.pl /tmp/nginx.cbt > /tmp/nginx.svg
    4. 将生成的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
  • 步骤:
    1. 进入到openresty 依赖的luaJIT 目录  之后执行 make clean  & make CCDEBUG=-g
    2. 重新源码编译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

    1. 如果遇到相关的说明没有安装  那就去yum 安装
    2. 使用重新编译好的ngnix 启动

5.2 lua火焰图生成

使用 lj-lua-stacks.sxx抓取栈信息,并用openresty-systemtap-toolkit 下的 fix-lua-bt 工具处理:

安装方式 也是是wget 下来 之后解压缩,每次去相应目录下使用。 

使用流程

  1. 找到要监控的pid  方法 (1)lsof -i:8088 – 端口   (2)ps -aux | grep
  2. 采样信息
    1. cd 到 stapxx-master 目录下  (cd /root/tool/stapxx-master) 
    2. 加环境变量 export PATH=$PWD:$PATH
    3. 采集  ./samples/lj-lua-stacks.sxx --arg time=30 --skip-badvars -x 7063 > /tmp/lua.bt   (7063时找到端口)
  3. fix lua bt
    1. cd到openresty-systemtap-toolkit 目录下 
    2. 执行 ./fix-lua-bt /tmp/lua.bt > /tmp/a_lua.bt
  4. 把前面采样到的信息绘制成火焰图
    1. cd 到FlameGraph 目录下 (cd  /root/tool/FlameGraph-master )
    2. 执行  ./stackcollapse-stap.pl /tmp/a_lua.bt > /tmp/lua_nginx.cbt 
    3. 执行  ./flamegraph.pl /tmp/lua_nginx.cbt > /tmp/lua_nginx.svg
  5. 将生成的svg 用浏览器打开 – 可以sz 下来 或者放在samba共享文件里

 

5.4 lua火焰图分析

问题就可以基本定位了。。。

在有请求时 基本的火焰图为 ab_lua_normal.svg

火焰图安装&使用

 

很明显大多数的在

火焰图安装&使用

 

继续优化优化。