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的文章:

突破systemtap脚本对资源使用的限制

http://blog.yufeng.info/archives/1213

 

 

 

你可能感兴趣的:(System)