已安装的软件包:
的systemtap-SDT-devel的-1.8-6.el5
的systemtap-devel的-1.8-6.el5
的systemtap-devel的-1.8-6.el5
的systemtap-运行时1.8-6.el5
的systemtap-SDT-devel的-1.8-6.el5
的systemtap-1.8-6.el5
的systemtap-启动脚本-1.8-6.el5
的systemtap-客户1.8-6.el5
的systemtap - 服务器 - 1.8-6.el5
的systemtap-测试包-1.8-6.el5
内核devel的-2.6.18-371.11.1.el5
内核调试devel的-2.6.18-371.11.1.el5
使用的命令:
stap -s 32 -D MAXBACKTRACE=100 -D MAXSTRINGLEN=4096 -D MAXMAPENTRIES=10240 \
-D MAXACTION=10000 -D STP_OVERLOAD_THRESHOLD=5000000000 --all-modules \
-ve 'global s; probe timer.profile { s[backtrace()] <<< 1; }
probe end { foreach (i in s+) { print_stack(i);
printf("\t%d\n", @count(s[i])); } } probe timer.s(60) { exit(); }' \
> out.stap-stacks
示例out.stap-stacks文件:
0xffffffff8000e81a 为0x0 1 0xffffffff8004ab87 为0x0 1 0xffffffff8025d15d 为0x0 1 0xffffffff80239356 为0x0 1 0xffffffff8004219a 为0x0 1 0xffffffff8000ca32 为0x0 1 0xffffffff8003214e 为0x0 1 0xffffffff80013bc8 为0x0 1 0xffffffff80232d41 为0x0 1 0xffffffff8001a4ca 为0x0 1 0xffffffff80011db5 为0x0 1 0xffffffff8004aad2 为0x0 1 0xffffffff800ec8bb 为0x0 1 0xffffffff8003ead5 为0x0 1 0xffffffff80234c43 为0x0
答案 0 :(得分:1)
backtrace()
函数仅限于内核空间回溯,print_stack()
仅将内核空间地址映射到符号。 (我无法解释为什么0xffffffff8 *地址没有转换为符号;也许是古代systemtap和古代内核的某种组合?)
如果您还要打印用户空间回溯数据,则需要使用u*
系列与回溯相关的功能。
另请参阅https://sourceware.org/systemtap/examples/#profiling/pf4.stp以获取包含用户空间工作的类似脚本。