文档章节

liunx systemtap install 遇到一些问题

-10
 -10
发布于 2015/02/04 21:03
字数 1181
阅读 164
收藏 0

http://hushi55.github.io/2015/01/27/linux-systemtap-install/

安装

我的安装是在 centos 上实验的,我们可以使用

<pre> yum install systemtap systemtap-runtime </pre>

验证

安装完后我们可以是会用下面的命令来验证是否安装成功:

<pre> stap -v -e 'probe vfs.read {printf("read performed"); exit()}' </pre>

若是一切顺利,我们看到下面的输出,这表明成功安装了:

<pre class="nowordwrap"> [root@perf01 ~]# stap -v -e 'probe vfs.read {printf("read performed"); exit()}' Pass 1: parsed user script and 103 library script(s) using 201324virt/29240res/3140shr/26600data kb, in 430usr/40sys/469real ms. Pass 2: analyzed script: 1 probe(s), 1 function(s), 3 embed(s), 0 global(s) using 293676virt/122532res/4116shr/118952data kb, in 3070usr/390sys/3464real ms. Pass 3: translated to C into "/tmp/stap424ZlL/stap_58ea609bf05d2a52a3426004df9f777f_1424_src.c" using 293676virt/122864res/4448shr/118952data kb, in 10usr/10sys/16real ms. Pass 4: compiled C into "stap_58ea609bf05d2a52a3426004df9f777f_1424.ko" in 14360usr/2790sys/17154real ms. Pass 5: starting run. read performed Pass 5: run completed in 20usr/60sys/403real ms. [root@perf01 ~]# </pre>

遇到的问题

kernel-devel 版本问题

我在实验时遇到的问题是,验证时出现下面的输出:

<pre class="nowordwrap"> [root@perf01 ~]# stap -v -e 'probe vfs.read {printf("read performed"); exit()}' Checking "/lib/modules/2.6.32-358.el6.x86_64/build/.config" failed with error: No such file or directory Incorrect version or missing kernel-devel package, use: yum install kernel-devel-2.6.32-358.el6.x86_64 [root@perf01 ~]# </pre>

我们列出提示的目录:

<pre class="nowordwrap"> [root@perf01 ~]# ll /lib/modules/2.6.32-358.el6.x86_64/ total 3408 lrwxrwxrwx. 1 root root 46 Sep 25 17:55 build -> ../../../usr/src/kernels/2.6.32-358.el6.x86_64 drwxr-xr-x. 2 root root 4096 Feb 22 2013 extra drwxr-xr-x. 11 root root 4096 Sep 25 17:55 kernel -rw-r--r--. 1 root root 566961 Sep 25 17:59 modules.alias -rw-r--r--. 1 root root 546171 Sep 25 17:59 modules.alias.bin -rw-r--r--. 1 root root 1369 Feb 22 2013 modules.block -rw-r--r--. 1 root root 69 Sep 25 17:59 modules.ccwmap -rw-r--r--. 1 root root 196799 Sep 25 17:59 modules.dep -rw-r--r--. 1 root root 287191 Sep 25 17:59 modules.dep.bin -rw-r--r--. 1 root root 68 Feb 22 2013 modules.drm -rw-r--r--. 1 root root 665 Sep 25 17:59 modules.ieee1394map -rw-r--r--. 1 root root 141 Sep 25 17:59 modules.inputmap -rw-r--r--. 1 root root 1236 Sep 25 17:59 modules.isapnpmap -rw-r--r--. 1 root root 29 Feb 22 2013 modules.modesetting -rw-r--r--. 1 root root 1905 Feb 22 2013 modules.networking -rw-r--r--. 1 root root 74 Sep 25 17:59 modules.ofmap -rw-r--r--. 1 root root 74887 Feb 22 2013 modules.order -rw-r--r--. 1 root root 405140 Sep 25 17:59 modules.pcimap -rw-r--r--. 1 root root 6259 Sep 25 17:59 modules.seriomap -rw-r--r--. 1 root root 215776 Sep 25 17:59 modules.symbols -rw-r--r--. 1 root root 274276 Sep 25 17:59 modules.symbols.bin -rw-r--r--. 1 root root 837314 Sep 25 17:59 modules.usbmap lrwxrwxrwx. 1 root root 5 Sep 25 17:55 source -> build drwxr-xr-x. 2 root root 4096 Feb 22 2013 updates drwxr-xr-x. 2 root root 4096 Sep 25 17:55 vdso drwxr-xr-x. 2 root root 4096 Feb 22 2013 weak-updates [root@perf01 ~]# </pre>

可以看到 build 是各一个软连接,我们再列出来提示的目录:

<pre class="nowordwrap"> [root@perf01 ~]# ll /usr/src/kernels/ total 4 drwxr-xr-x. 22 root root 4096 Jan 10 03:00 2.6.32-504.3.3.el6.x86_64 [root@perf01 ~]# </pre>

我们看看我们 kernel 的版本:

<pre> [root@perf01 ~]# uname -r 2.6.32-358.el6.x86_64 [root@perf01 ~]# </pre>

显然是版本对不上,安装的 kernel 源码要新,我们可以卸载掉,使用 rpm 包重新安装

<pre> yum remove kernel-devel </pre>

卸载之后,我们可以上 google 查找我们内核版本的 kernel-devel-2.6.32-358.el6.x86_64 rpm 包。下载以后使用命令安装:

<pre> rpm -ivh kernel-devel-2.6.32-358.el6.x86_64.rpm </pre>

内核符号信息

上面的内核版本安装完成后使用上面的检查命令检查

<pre class="nowordwrap"> [root@perf01 ~]# stap -v -e 'probe vfs.read {printf("read performed"); exit()}' Pass 1: parsed user script and 103 library script(s) using 201324virt/29244res/3140shr/26600data kb, in 450usr/30sys/508real ms. semantic error: while resolving probe point: identifier 'kernel' at /usr/share/systemtap/tapset/linux/vfs.stp:768:18 source: probe vfs.read = kernel.function("vfs_read") ^ semantic error: missing x86_64 kernel/module debuginfo [man warning::debuginfo] under '/lib/modules/2.6.32-358.el6.x86_64/build' semantic error: while resolving probe point: identifier 'vfs' at &lt;input&gt;:1:7 source: probe vfs.read {printf("read performed"); exit()} ^ semantic error: no match Pass 2: analyzed script: 0 probe(s), 0 function(s), 0 embed(s), 0 global(s) using 206720virt/34572res/5136shr/29892data kb, in 110usr/410sys/529real ms. Pass 2: analysis failed. [man error::pass2] [root@perf01 ~]# </pre>

出现 semantic error 表明是系统没有符号信息,我们需要手动的安装符号 rpm,我们可以上 http://debuginfo.centos.org 查找

  • kernel-debuginfo-common-`uname -r`
  • kernel-debuginfo-`uname -r`

下载好,使用 rpm 命令安装即可:

<pre> rpm -ivh kernel-debuginfo-*.rpm </pre>

其他问题

安装完后可能还会有这样的错误:

<pre> ... /usr/src/kernels/2.6.32-358.el6.x86_64/arch/x86/include/asm/atomic_64.h:21: note: expected ‘const struct atomic_t *’ but argument is of type ‘int’ /tmp/stapsc5jB6/stap_828df21dec234dbb5079577b35750b2c_1424_src.c:848: error: implicit declaration of function ‘skipped_count_reentrant’ /tmp/stapsc5jB6/stap_828df21dec234dbb5079577b35750b2c_1424_src.c:848: error: passing argument 1 of ‘atomic_read’ makes pointer from integer without a cast /usr/src/kernels/2.6.32-358.el6.x86_64/arch/x86/include/asm/atomic_64.h:21: note: expected ‘const struct atomic_t *’ but argument is of type ‘int’ /tmp/stapsc5jB6/stap_828df21dec234dbb5079577b35750b2c_1424_src.c:849: error: passing argument 1 of ‘atomic_read’ makes pointer from integer without a cast /usr/src/kernels/2.6.32-358.el6.x86_64/arch/x86/include/asm/atomic_64.h:21: note: expected ‘const struct atomic_t *’ but argument is of type ‘int’ ... </pre>

这是因为我们使用

<pre> yum remove kernel-devel </pre>

  • systemtap-2.5-5.el6.x86_64.rpm
  • systemtap-devel-2.5-5.el6.x86_64.rpm

这两个 rpm 包也给卸载了,我们只需要使用上面的命令重新安装 systemtap 即可。

参考

© 著作权归作者所有

-10

-10

粉丝 10
博文 10
码字总数 14996
作品 0
深圳
高级程序员
私信 提问
使用 SystemTap 调试内核

在 SystemTap 出现之前,对于 Linux 程序员或者系统管理员而言,调试内核往往是一场噩梦。例如,你怀疑传递给系统调用 read 的参数 fd 出了问题,想把它打印出来,你需要做的是:首先得到一份...

红薯
2009/09/15
2.5K
0
ubuntu 8.04下安装和使用systemtap

systemtap是一个linux下的系统调用和跟踪程序,如果您在windows下用过filemon或者processmonitor的话就明白了.systemtap功能比processmonitor更强大一些,定制性更高些.但是显然,和大多数linux...

长平狐
2012/10/23
350
0
使用systemtap调试linux内核

安装SystemTap(ubuntu10.10) 简便的安装方式通过下面命令直接下载并安装在系统里: # sudo apt-get install systemtap 也可以去http://sourceware.org/systemtap/getinvolved.html 下载各种...

harrylee007
2012/01/09
0
0
systemtap系列之SYSTEMTAP介绍

systemtap系列之SYSTEMTAP介绍 SystemTap 是监控和跟踪运行中的Linux 内核的操作的动态方法。这句话的关键词是动态,因为SystemTap 没有使用工具构建一个特殊的内核,而是允许您在运行时动态...

binarydady
01/03
0
0
Linux 自检和 SystemTap

Linux 自检和 SystemTap 11/20. 2013 用于动态内核分析的接口和语言 现代的操作系统内核提供自检 功能,即动态地检查内核以理解其行为的能力。这些行为可以反映内核问题和性能瓶颈。拥有这些...

Edwin_Lau
2013/12/04
87
0

没有更多内容

加载失败,请刷新页面

加载更多

聊聊rocketmq的AccessChannel

序 本文主要研究一下rocketmq的AccessChannel AccessChannel rocketmq-client-4.5.2-sources.jar!/org/apache/rocketmq/client/AccessChannel.java public enum AccessChannel { /** ......

go4it
昨天
2
0
自己实现 aop 和 spring aop

上文 说到,我们可以在 BeanPostProcessor 中对 bean 的初始化前化做手脚,当时也说了,我完全可以生成一个代理类丢回去。 代理类肯定要为用户做一些事情,不可能像学设计模式的时候创建个代...

sanri1993
昨天
3
0
Java 8 Stream Api 中的 skip 和 limit 操作

1. 前言 Java 8 Stream API 中的skip()和limit()方法具有类似的作用。它们都是对流进行裁剪的中间方法。今天我们来探讨一下这两个方法。 2. skip() skip(lang n) 是一个跳过前 n 个元素的...

码农小胖哥
昨天
1
0
看中华小当家第二集片段记录

最近正好在学习做饭,看看这片子,燃烧燃烧做饭的热情 哈哈,以下是摘的一些句子和个人理解 My name is Liu Mao Xing . More commonly known as Mao. 个人理解:我的名字叫 刘昴星, (commo...

T型人才追梦者
昨天
3
0
Python基础-6

1、注释 # 单行注释'''多行注释'''"""多行注释"""# 中文编码声明注释 ,在文件开头加上下面这行注释# encoding=utf-8或者# -*- encoding:utf-8 -*- (-*- 只是为了美观,没有实际......

zfskkk
昨天
5
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部