systemtap和火焰图(flamegraph)介绍

本文详细介绍了系统tap的安装与使用方法,包括如何在centos6上安装并执行脚本,以及如何利用火焰图将数据直观可视化。通过创建特定的脚本来监控性能关键点,并使用火焰图进行数据解析,实现高效性能问题定位。
部署运行你感兴趣的模型镜像

System介绍:

主要用于诊断性能问题

systemtap介绍文章:https://www.ibm.com/developerworks/cn/linux/l-systemtap/

官网:https://sourceware.org/systemtap/

 

火焰图介绍:

火焰图将systemtap搜集到的数据以直观的方式显示出来

这里是火焰图的介绍:http://www.brendangregg.com/FlameGraphs/cpuflamegraphs.html

 

下面介绍systemtap的安装和使用

 

一:systemtap在centos 6的安装,由于修改了内核,所以中间需要重启系统

参考文档:http://www.emsperformance.net/2013/02/27/installing-systemtap-on-centos-6/

摘抄其中的关键点:

cd /etc/yum.repos.d/

vi CentOs-Debuginfo.repo,修改enabled=1

yum --disablerepo="*"--enablerepo="centosplus" install kernel.x86_64

yum install kernel-debuginfo.x86_64

reboot

yum --disablerepo="*"--enablerepo="centosplus" install kernel-devel.x86_64

最后执行stap-v -e 'probe vfs.read {printf("read performed\n"); exit()}'

看到Success就成功了,否则会报错

 

二:如何使用systemtap收集数据

1:抄的大神脚本,创建脚本,文件名以.stp结尾,比如ngx.stp, 我在附件中也放了一份,内容如下:

global s;

global quit = 0;

probe timer.profile {

    if (pid() == target()) {

       if (quit) {

           foreach ([u] in s) {

               print_ustack(u);

               printf("\t%d\n", @count(s[u]));

           }

           exit();

       } else {

           s[ubacktrace()] <<< 1;

       }

    }

}

probe timer.s(100) {

    quit = 1

}

上面的probetimer.s(100)是收集时间,可以根据需要修改

 

2:按以下方式执行:

stap --ldd -d /to/be/run --all-modules -DMAXMAPENTRIES=10240 -D MAXACTION=2000000 -D MAXSKIPPED=10000000 -D MAXTRACE=100-D MAXSTRINGLEN=4096 -DSTP_NO_OVERLOAD -D MAXBACKTRACE=100 -x 12641 ngx.stp--vp 0001 > ngx.out

其中-d后面是要捕捉的执行文件绝对路径,-x后面是可执行文件当前运行实例的进程id

 

三、使用火焰图转换工具

1:下载火焰图转换脚本文件

下载地址在:https://github.com/brendangregg/FlameGraph

2:按以下命令转换捕捉结果到svg文件

perl stackcollapse-stap.pl ngx.out >ngx.out2

perl flamegraph.pl ngx.out2 > ngx.svg

3:最后将svg文件以浏览器方式打开就可以了

 

其他

1:一个有关火焰图讨论组:https://groups.google.com/forum/#!topic/openresty/-kREoKtJwJA

2:systemtap的其它应用:http://csrd.aliapp.com/?p=893

您可能感兴趣的与本文相关的镜像

Stable-Diffusion-3.5

Stable-Diffusion-3.5

图片生成
Stable-Diffusion

Stable Diffusion 3.5 (SD 3.5) 是由 Stability AI 推出的新一代文本到图像生成模型,相比 3.0 版本,它提升了图像质量、运行速度和硬件效率

<think>好的,我现在需要回答用户关于如何使用火焰进行性能分析的问题。首先,我得仔细看看用户提供的引用内容,确保回答准确并正确引用资料。 用户提到了四个引用,都火焰、perf工具相关。引用1提到了使用perf_events生成红蓝差分火焰,引用2说明火焰的功能,引用34则讨论了perf的使用场景采样方法。我的回答需要涵盖工具选择、数据采集、生成火焰的步骤,以及示例,同时引用相关段落。 首先,我需要明确火焰的基本概念用途,根据引用2,火焰主要用于分析函数执行频率、阻塞情况内存分配,帮助定位性能瓶颈。然后,工具方面,用户提到perf,所以应该以perf为例,步骤包括安装、数据采集、转换数据生成火焰。 接下来,步骤部分需要详细说明如何使用perf record采集数据,然后用FlameGraph脚本处理数据。可能需要检查用户提供的引用1中的difffolded.pl是否相关,但用户的问题主要是生成普通火焰,所以可能不需要涉及红蓝差分部分,但引用1中的操作步骤可以借鉴。 然后,示例部分需要给出具体的命令行操作,比如运行perf record,然后使用stackcollapse-perf.plflamegraph.pl生成SVG。这些步骤在引用14中都有涉及。 还要注意用户提到的优化方法,比如调整采样频率、过滤数据,这些在引用4中提到过采样法,可能需要调整perf的参数,比如-F 99。 最后,注意事项部分需要提醒内核符号、权限问题,引用3提到perf用于内核线程分析,可能需要sudo权限,同时确保符号表正确。 现在需要组织这些信息,结构清晰,分步骤说明,并正确添加引用标记。例如,在说明perf record时引用引用4,提到采样方法。在火焰生成步骤引用引用1中的脚本。 另外,用户可能希望了解如何解读火焰,所以需要简要说明宽度代表CPU时间,层级表示调用栈,这部分在引用2中提到火焰的功能,可以引用。 最后,生成相关问题,需要围绕火焰的应用、工具对比、常见问题等,参考用户之前的示例问题,比如如何优化采样、不同工具比较、解读火焰的技巧等。 检查是否有遗漏的引用内容,确保每个引用都被合理使用,并且步骤准确无误。例如,引用3提到perf用于内核线程,而用户的问题可能更多是应用层,但步骤可能通用,需要注意是否需要特别说明内核分析的情况。 现在,整理思路,分步骤撰写回答,确保每个部分都有对应的引用支持,并自然地添加引用标记。</think>### 如何使用火焰进行性能分析 火焰是一种可视化性能分析工具,通过直观展示函数调用栈的耗时分布,帮助开发者快速定位性能瓶颈[^2]。以下是使用火焰进行性能分析的详细方法步骤: --- #### 一、工具选择与安装 1. **核心工具**:推荐使用 `perf`(Linux性能分析工具) **Brendan Gregg** 开发的 [FlameGraph脚本集](https://github.com/brendangregg/FlameGraph)。 - 安装 `perf`: ```bash sudo apt-get install linux-tools-common linux-tools-generic ``` - 下载 FlameGraph 脚本: ```bash git clone https://github.com/brendangregg/FlameGraph.git ``` 2. **其他工具适配**: 若需分析内存分配、I/O阻塞等场景,可结合 `stap`(SystemTap)、`bcc` 等工具采集数据[^3]。 --- #### 二、数据采集与火焰生成 1. **使用 perf 采集性能数据** 通过 `perf record` 对目标程序进行采样(默认为 CPU 时钟事件): ```bash sudo perf record -F 99 -g -p <进程PID> -- sleep 30 ``` - `-F 99`:每秒采样99次,平衡精度与开销[^4]; - `-g`:记录调用栈信息; - `-p <PID>`:指定目标进程; - `sleep 30`:持续采样30秒。 2. **生成火焰** 将 `perf.data` 转换为火焰: ```bash perf script | FlameGraph/stackcollapse-perf.pl | FlameGraph/flamegraph.pl > output.svg ``` - `stackcollapse-perf.pl`:将采样数据折叠为调用栈格式; - `flamegraph.pl`:生成SVG格式火焰[^1]。 --- #### 三、示例分析(以CPU密集型程序为例) 1. **运行程序并采集数据**: ```bash # 启动目标程序 ./my_program & PID=$! # 采集数据 sudo perf record -F 99 -g -p $PID -- sleep 30 ``` 2. **生成火焰**: 执行上述转换命令后,打开 `output.svg`,观察宽度较大的函数块,即为热点函数。 --- #### 四、火焰解读技巧 1. **横向宽度**:表示函数在采样中出现的频率,宽度越大,CPU耗时越高[^2]。 2. **纵向层级**:表示函数调用栈深度,顶层为正在执行的函数,下层为调用者。 3. **颜色区分**:通常无特定含义,但可自定义(如红色表示内核函数,绿色表示用户函数)。 --- #### 五、注意事项 1. **内核符号解析**: 若需分析内核性能,需安装调试符号包(如 `linux-image-$(uname -r)-dbgsym`)。 2. **权限问题**: `perf` 通常需要 `sudo` 权限,容器环境下需挂载 `/sys` 目录。 3. **差分火焰**: 对比优化前后的性能差异,可使用 `difffolded.pl` 生成红蓝差分火焰[^1]。 ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值