linux 安装Systemtap
在之前的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
?
?
?