systemTab动态分析linux下lua性能

杀马特。学长 韩版系。学妹 提交于 2020-08-08 14:01:48

https://github.com/openresty/openresty-systemtap-toolkit

https://sourceware.org/systemtap/langref/

https://github.com/brendangregg/FlameGraph

参考ngx-sample-lua-bt

现代linux 动态追踪技术 主要是基于 ebpf

systemtap 是 动态追踪的前端, 技术原理是 编译一个 类似c的脚本 生成 内核模块, 来监控用户空间的lua程序

对openResty的脚本改造两点,

1: 去掉nginx相关函数的 probe 探针

2:如何获取LuaState 状态机的方法 调整, 可以使用程序内部的 全局变量定义

if(\@defined(\@var("globalL", "$lua_path"))) {
	L = \@var("globalL", "$lua_path")
}

对timer 采样也可以调整

timer.profile 每个CPU周期 timer.ms 是 定时毫秒

动态追踪核心:

定义probe 探针位置

定义timer 采样

在timer中判断 PID 进程ID, 来确定自己要观察的程序

timer.s 观察总时长后结束

systemtap 的堆栈格式是

一次堆栈每层 文件:行号 总共出现次数

fix-bt 之后 得到 lua 函数名字

flamegraph 的工具 stack stap 多行压缩到一行

最后生成 火焰图 分析

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