lua 火焰图

lua 火焰图

一 安装对应的内核包

http://buildlogs-seed.centos.org/c7.1810.u.x86_64/kernel/20190729174341/3.10.0-957.27.2.el7.x86_64/

通过 uname -r 查看版本,这里以测试环境为例

sudo rpm -ivh kernel-debuginfo-($version).rpm
sudo rpm -ivh kernel-debuginfo-common-($version).rpm
sduo rpm -ivh kernel-devel-($version).rpm    

或者

sudo yum install -y kernel-devel
sudo debuginfo-install kernel

注意!!!一定要把所有内核包都安装上不然执行以下操作会到时内核崩溃重启

二 安装systemtap

sudo yum install systemtap

三、安装stap++

stap++ 是为了便于使用一种干净的语言编写完整的调试工具,openresty作者给 SystemTap 语言进行了扩展,实现了一个更高层的“宏语言”,叫做 stap++](https://blog.openresty.com.cn/cn/dynamic-tracing/#fn4)。用 Perl 实现的 stap++ 解释器可以直接解释执行 stap++ 源码,并在内部调用 SystemTap 命令行工具。https://github.com/openresty/stapxx.git 这个仓库里面也包含了很多直接使用 stap++ 宏语言实现的完整的调试工具。

git clone https://github.com/openresty/stapxx.git --depth=1
mv stapxx /opt/

四、安装FlameGraph

下载 Flame-Graphic 生成包:Github 地址,该工具包中包含多个火焰图生成工具

git clone https://github.com/brendangregg/FlameGraph.git --depth=1
mv FlameGraph /opt/

生成火焰图

首先查找nginx的work 进程的pid ,

ps -ef | grep nginx  # 获取 worker 进程的 pid,假设需要查看的进程pid 是24235
cd /opt/stapxx
# 针对进程采样,--arg time 表示采样多少时间,单位是秒
sudo ./stap++ ./samples/lj-lua-stacks.sxx --skip-badvars --arg time=10  -x 24235 > stacks.bt
cd /opt/FlameGraph/
./stackcollapse.pl /opt/stapxx/stacks.bt > stacks.cbt
./flamegraph.pl ./stacks.cbt --title "test" > ./stacks.svg
posted @ 2022-03-23 16:35  zhqqqy  阅读(361)  评论(0)    收藏  举报