systemtap 生成火焰图
2016-03-04 14:51
615 查看
编写SystemTap脚本(另外,春哥也写了很多脚本,参考春哥的github)
global bt;
global quit = 0
probe timer.profile
{
if (pid() == target())
{
if (!quit)
{
bt[backtrace(), ubacktrace()] <<<1
}
else
{
foreach ([sys, usr] in bt- limit 1000)
{
print_stack(sys)
print_ustack(usr)
printf("\t%d\n", @count(bt[sys, usr]))
}
exit()
}
}
}
probe timer.s(20) {
quit = 1
}
脚本的主要功能是在每个时钟tick都进行一次采样,采集的指定进程的内核栈信息和用户态栈信息,20s后开始退出,并输出结果。将上面的脚本保存在fire.stp。
4、对nginx进行压测并执行脚本
使用ab、polygraph等工具对nginx进行压测,然后执行脚本,命令如下:
stap --ldd -d /usr/local/nginx/sbin/nginx
\
--all-modules-D
MAXMAPENTRIES=10240 \
-D MAXACTION=20000 \
-D MAXTRACE=100 \
-D MAXSTRINGLEN=4096 \
-D MAXBACKTRACE=100-x
1750 fire.stp>a.out
-d选项指定需要的符号信息来源,这里指定的就是可执行文件的路径,注意在编译nginx时要加上-g选项。-D选项是用来设置一些宏,这里用到的宏都是一些关于资源限制的,根据自己的环境修改,具体的含义参见man
stap。-x用来指定针对的进程,从nginx的work进程中选择一个即可。fire.stp是脚本文件,a.out用来存储输出,用于在后面生成火焰图。
前面已经检查了运行stap脚本所需要的环境,但是在执行这步的话还是可能会报下面的警告:
WARNING: Missing unwind data for module, rerun with 'stap -d stap_554dc449843d32431205d7d8e384a4e_22086'
WARNING: _stp_read_address failed to access memory location
ERROR: Skipped too many probes, check MAXSKIPPEDor try
again with stap-t for more
details.
WARNING: Number of errors:0,
skipped probes:105
WARNING: /usr/bin/staprun
exited with status:1
Pass 5: run failed. Try again
with another'--vp 00001' option.
在网上看到很多人遇到,不过没有关系,在Google Groups看到章亦春说这个没有影响,只要能正常生成火焰图就行。我的火焰图就是在这种警告下生成的,而且有时还会报utrace/uprobes不支持等警告,忽略这些警告即可。
5、生成火焰图
生成火焰图需要两个perl脚本,脚本在FlameGraph,执行过程如下所示:
[root@FWD_YF_009_111 ~]#
perl stackcollapse-stap.pl a.out > a.out2
[root@FWD_YF_009_111 ~]# perl
flamegraph.pl a.out2 > a.svg
在window下用浏览器打开a.svg文件
global bt;
global quit = 0
probe timer.profile
{
if (pid() == target())
{
if (!quit)
{
bt[backtrace(), ubacktrace()] <<<1
}
else
{
foreach ([sys, usr] in bt- limit 1000)
{
print_stack(sys)
print_ustack(usr)
printf("\t%d\n", @count(bt[sys, usr]))
}
exit()
}
}
}
probe timer.s(20) {
quit = 1
}
脚本的主要功能是在每个时钟tick都进行一次采样,采集的指定进程的内核栈信息和用户态栈信息,20s后开始退出,并输出结果。将上面的脚本保存在fire.stp。
4、对nginx进行压测并执行脚本
使用ab、polygraph等工具对nginx进行压测,然后执行脚本,命令如下:
stap --ldd -d /usr/local/nginx/sbin/nginx
\
--all-modules-D
MAXMAPENTRIES=10240 \
-D MAXACTION=20000 \
-D MAXTRACE=100 \
-D MAXSTRINGLEN=4096 \
-D MAXBACKTRACE=100-x
1750 fire.stp>a.out
-d选项指定需要的符号信息来源,这里指定的就是可执行文件的路径,注意在编译nginx时要加上-g选项。-D选项是用来设置一些宏,这里用到的宏都是一些关于资源限制的,根据自己的环境修改,具体的含义参见man
stap。-x用来指定针对的进程,从nginx的work进程中选择一个即可。fire.stp是脚本文件,a.out用来存储输出,用于在后面生成火焰图。
前面已经检查了运行stap脚本所需要的环境,但是在执行这步的话还是可能会报下面的警告:
WARNING: Missing unwind data for module, rerun with 'stap -d stap_554dc449843d32431205d7d8e384a4e_22086'
WARNING: _stp_read_address failed to access memory location
ERROR: Skipped too many probes, check MAXSKIPPEDor try
again with stap-t for more
details.
WARNING: Number of errors:0,
skipped probes:105
WARNING: /usr/bin/staprun
exited with status:1
Pass 5: run failed. Try again
with another'--vp 00001' option.
在网上看到很多人遇到,不过没有关系,在Google Groups看到章亦春说这个没有影响,只要能正常生成火焰图就行。我的火焰图就是在这种警告下生成的,而且有时还会报utrace/uprobes不支持等警告,忽略这些警告即可。
5、生成火焰图
生成火焰图需要两个perl脚本,脚本在FlameGraph,执行过程如下所示:
[root@FWD_YF_009_111 ~]#
perl stackcollapse-stap.pl a.out > a.out2
[root@FWD_YF_009_111 ~]# perl
flamegraph.pl a.out2 > a.svg
在window下用浏览器打开a.svg文件
相关文章推荐
- 我的火焰图安装笔记[red hat]
- 如何使用火焰图来降低服务器负载
- 火焰图之性能分析
- 在centos linux 环境下使用火焰图
- 宋宝华:火焰图:全局视野的Linux性能剖析
- SparkSQL性能分析与优化及相关工具小结
- perf 生成火焰图
- Linux下用火焰图进行性能分析
- perf+flamegraph 分析 nginx-rtmp 性能
- lua安装火焰图
- 安装golang 火焰图
- 安装火焰图生成工具
- JAVA性能分析之使用火焰图
- 火焰图分析程序性能
- Golang FlameGraph(火焰图)
- Linux下systemtap和火焰图介绍及安装
- 屏蔽窗口操作
- nw.js node-webkit系列(17)怎样打包和分发你的应用
- samba环境配置
- 一些工具