在之前的blog里介绍了一堆systemtap的资料,然后之前一直没安装成功过,这次花时间重新搞了下,终于成功了,很是激动,故分享下,主要是错误处理的分享。
1: libdwfl failure (missing x86_64 kernel/module debuginfo under '/lib/modules/2.6.18-164.11.1.el5/build'):
这个错误是由于缺失 kernel-debuginfo-common 包和 kernel-debuginfo,解决方法是去http://rpm.pbone.net找到对应当前内核版本的debug包,如何看当前内核版本信息呢,使用如下命令 uname -r (一般我们使用uname -a)
切忌 一定要找合适的版本号
参考资料:http://steven1981.itpub.net/post/7967/525257
然后sudo rpm ivh XXXXXXXX
安装好了以后可以看到 /usr/lib/debug 目录下有东西了。
然后需要告诉Systemtap去找这个debug信息了。
参考资料来自:
http://sources.redhat.com/git/?p=systemtap.git;a=blob_plain;f=README;hb=HEAD
- By default, systemtap looks for the debug info in these locations: /boot/vmlinux-`uname -r` /usr/lib/debug/lib/modules/`uname -r`/vmlinux /lib/modules/`uname -r`/vmlinux /lib/modules/`uname -r`/build/vmlinux
依据这个默认搜索路径,我们可以将debug的vmlinux链接到/lib/modules下,例如我的
sudo ln -s /usr/lib/debug/lib/modules/2.6.18-164.15.1.el5/vmlinux /lib/modules/2.6.18-164.el5xen
2:当执行简单的probe begin { log("hello world") exit() }可以,但是执行复杂的脚本就报以下错误
semantic error: failed to retrieve location attribute for local ‘next’ (dieoffset: 0x6660f0): identifier ‘$next’ at /usr/share/systemtap/tapset/scheduler.stp:39:17
source: task_next = $next
排除你内核debug版本不一致的问题,一般这个错误可以升级当前的systemtap版本解决
sudo yum update systemtap
3:Array overflow, check MAXMAPENTRIES near identifier
解决方案是 -DMAXMAPENTRIES=10240 类似java -D参数
这里可以参见霸爷的blog的文章:
http://blog.yufeng.info/archives/1213