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

你可能感兴趣的:(systemtap和火焰图(flamegraph)介绍)