nginx lua 性能分析

本文介绍了一种利用动态追踪技术进行NGXLua性能分析的方法,包括相关工具的安装与使用流程,如SystemTap和FlameGraph等,适用于解决高CPU使用率场景下LuaJIT 2.1代码性能瓶颈。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

ngx lua 性能分析

主要依赖动态追踪技术实时抓取获得函数调用栈的耗时占比情况
主要介绍相关工具安装使用
关于动态追踪 这有篇看不大懂的blog https://openresty.org/posts/dynamic-tracing/

工具安装

https://github.com/openresty/openresty-systemtap-toolkit.git ngxlua性能分析
https://github.com/openresty/stapxx#lj-lua-stacks systemtap扩展 这里主要用来做luajit2.1的代码性能分析
https://github.com/brendangregg/FlameGraph.git 火焰图svg制作工具

相关依赖安装

systemtap 安装(ubuntu)

添加Ubuntu ddebs源文件,在命令行粘贴如下命令:

sudo tee /etc/apt/sources.list.d/ddebs.list << EOF
deb http://ddebs.ubuntu.com/ ${codename}      main restricted universe multiverse
deb http://ddebs.ubuntu.com/ ${codename}-security main restricted universe multiverse
deb http://ddebs.ubuntu.com/ ${codename}-updates  main restricted universe multiverse
deb http://ddebs.ubuntu.com/ ${codename}-proposed main restricted universe multiverse
EOF
  • 其中在Ubuntu 11.10中把universe,multiverse删除,改为:
sudo tee /etc/apt/sources.list.d/ddebs.list << EOF
deb http://ddebs.ubuntu.com/ ${codename}      main restricted
deb http://ddebs.ubuntu.com/ ${codename}-security main restricted
deb http://ddebs.ubuntu.com/ ${codename}-updates  main restricted
deb http://ddebs.ubuntu.com/ ${codename}-proposed main restricted
EOF

Ubuntu Key认证 :
16.04 and higer

sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys C8CAB6595FDFF622
  • other
sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys ECDCAD72428D7C01
  •  

依次执行

	  sudo apt-get update -y
      sudo apt-get install -y systemtap gcc
      sudo apt-get install linux-image-$(uname -r)-dbgsym

验证Systemtap是否安装成功,正确显示hello world即安装成功

stap -e 'probe kernel.function("sys_open") {log("hello world") exit()}'
  • 1

安装问题

中间出现 类似 include/linux/compiler-gcc.h:106:30: fatal error: linux/compiler-gcc6.h: No such file or directory错误时 可能是gcc 版本问题
可尝试将gcc 版本降为 4.x

工具使用

因性能分析工具涉及均为内核操作,工具使用皆需 root 权限

针对高cpu使用率的 nginx worker 分析 (取得进程pid 记为PID)

  1. nginx 进程 信息抓取

cd -/openresty-systemtap-toolkit
./sample-bt -p 6162 -t 10 -u > /tmp/aa.bt-t 为采样时间 -p 跟 pid 默认-u 输出 aa.bt 文件

  1. lua 业务代码信息抓取

cd -/
export PATH=$PWD:$PATH
./samples/lj-lua-stacks.sxx --skip-badvars -x 3467 --arg time=5 > /tmp/lua_aaa.bt-x为pid --arg time=5 取样时间 输出/tmp/lua_aaa.bt

  1. 火焰图图制作

将以上两个步骤获取的文件制作成 浏览器可查看的火焰图
cd -/FlameGraph
./stackcollapse-stap.pl /tmp/aa.bt > /tmp/aa.cbt/tmp/aa.bt 输入文件
./flamegraph.pl --encoding="ISO-8859-1" --title="Lua-land on-CPU flamegraph" /tmp/aa.cbt > /tmp/aa.svg
浏览器 打开 aa.svg

perf 火焰图生成

https://blog.csdn.net/dusk0825/article/details/108095740
https://blog.csdn.net/super_ai_x/article/details/97790432

其他情况

  1. 暂时想写 请自行尝试 自行google 自己动手丰衣足食
  2. 可阅 https://blog.csdn.net/hubaolin/article/details/18146413 或者 工具的相关介绍具体尝试

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值