systemtap和火焰图(flamegraph)介绍

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

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
火焰是一种非常强大的性能分析工具,其详细用法如下: 1. 生成火焰:首先需要在应用程序运行时采集数据,并生成一个火焰。采集数据的方式有多种,比如可以使用perf、DTrace、SystemTap等工具。其中,perf是Linux系统上最常用的性能分析工具之一,可以采集CPU性能事件,生成火焰。生成火焰的命令为:`perf record -g -p <pid>`,其中`-g`参数表示采集堆栈信息,`-p`参数表示指定进程ID。 2. 分析火焰:生成火焰后,可以使用各种工具对其进行分析。比如,可以使用FlameGraph、Speedscope等工具。其中,FlameGraph是一种开源工具,它可以将perf生成的数据转换成火焰,并提供了交互式的分析界面。Speedscope是一个基于Web的性能分析工具,可以支持多种采集数据的方式,并提供了一些高级的分析功能。 3. 分析火焰的方法:在火焰中,我们可以看到每个函数调用所占用的CPU时间比例和堆栈深度。通过分析火焰,我们可以找到应用程序中的性能瓶颈,并优化代码。 具体分析方法如下: - 找到占用CPU时间最多的函数:在火焰中,找到宽度最大的矩形,这个矩形所代表的函数调用就是占用CPU时间最多的函数。我们可以优化这个函数的代码,来提升应用程序的性能。 - 找到函数调用链:在火焰中,每个矩形下方的矩形就代表了该函数调用中的子函数调用。我们可以通过分析这些矩形,找到函数调用链,从而优化代码。 - 找到函数调用路径:在火焰中,每个矩形的高度代表了函数调用在堆栈中的深度。通过分析矩形的高度,我们可以找到函数调用路径,进而找到性能瓶颈。 综上所述,火焰是一种非常强大的性能分析工具,可以帮助开发者快速定位应用程序中的性能瓶颈,从而优化代码的性能。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值