写在前面:

systemtap依赖的debuginfo可以从这里(http://debuginfo.centos.org/6/x86_64/)找到,如果幸运的话,你可以直接yum install kernel-debuginfo kernel-debuginfo-common来安装

话说systemtap是一个非常强悍的linux调试工具,但是似乎并不是特别的常用,今天尝试用了一下,确实有一些心得。

安装:

 
1
yum install systemtap

然后就有systap命令了,弄个脚本试试跑跑吧:

 
1
stap -e 'probe begin { log("hello world") exit() }'

有错误了:

 
1
2
Checking "/lib/modules/2.6.32-431.el6.x86_64/build/.config" failed with error: 没有那个文件或目录
Incorrect version or missing kernel-devel package, use: yum install kernel-devel-2.6.32-431.el6.x86_64

大致如上,可能版本号有所差异;好歹有提示,那就照做;不过,可能你确实已经安装了对应版本的kernel-devel; 你们不防rpm -ql kernel-devel 看看安装到哪里了,如果是 /usr/src/kernels/2.6.32-431.el6.x86_64 那么不妨执行:

 
1
ln -s /usr/src/kernels/2.6.32-431.el6.x86_64 /lib/modules/2.6.32-431.el6.x86_64/build

其实可以这样:

 
1
stap-prep

该命令可以帮你安装需要的依赖,主要是kernel-devel 和 kernel-debuginfo; 关键是要安装指定的版本,版本错了不行,如果使用的是本地的yum源,可能找不到指定的版本号的包,这样可以修改为使用官方的yum源,这可能是一个比较慢的过程,因为kernel-debuginfo 大小可能超过1G;单从这个来看,该工具的使用成本还是不小的; 也很有可能你配置了debuginfo的yum源,但是没有enable,可以在yum时候临时enable一下,eg:

 
1
yum --enablerepo=*-debuginfo install kernel-debuginfo-3.10.0-327.13.1.el7.x86_64

安装完后再次执行:

 
1
stap -e 'probe begin { log("hello world") exit() }'

果然有hello world输出,再来一个 profile.stp:

 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
global syscalllist
 
probe begin {
printf("System Call Monitoring Started (10 seconds)...\n")
}
 
probe syscall.*
{
syscalllist[pid(), execname()]++
}
 
probe timer.ms(10000) {
foreach ( [pid, procname] in syscalllist ) {
printf("%s[%d] = %d\n", procname, pid, syscalllist[pid, procname] )
}
exit()
}

使用场景

  1. 看看哪个进程在查询dns
    dns.stp:

     
    1
    2
    3
    4
    5
    probe udp.sendmsg {
      if ( dport == 53 ) {
        printf ("PID %5d (%s) sent UDP to %15s 53\n", pid(), execname(), daddr)
      }
    }

参考资料:

最新文章

  1. AES加密算法C++实现
  2. Unity3d + NGUI 的多分辨率适配
  3. 【poj1182】 食物链
  4. 系统启动时,spring配置文件解析失败,报”cvc-elt.1: 找不到元素 'beans' 的声明“异常
  5. [terry笔记]更改oracle用户名
  6. 百度之星A
  7. eclipse中的输入提示怎么设置
  8. 完全备份ORACLE数据库 并在另一台电脑上恢复
  9. weblogic8.1在myeclipse中启动正常,在单独的weblogic中无法正常启动的解决方案.
  10. 关于C#的一点小知识 以后自己用
  11. CodeForces 384C Milking cows
  12. 25+免费的Bootstrap HTML5网站模板
  13. ElasticSearch入门(3) —— head插件
  14. OC语言的面向对象—类和对象、方法
  15. Python_自定义栈
  16. 如何在你的项目中集成 CAP【手把手视频教程】
  17. js学习之路2: JavaScript 变量
  18. 让overflow:auto页面滚动条出现时不跳动
  19. shell解析my.cnf配置文件
  20. SpringMVC 使用@ResponseBody返回json 中文乱码与返回实体类报错

热门文章

  1. Ruby设计模式-观察者模式学习笔记
  2. VUE +element el-table运用sortable 拖拽table排序,实现行排序,列排序
  3. 解读tensorflow之rnn【转】
  4. LeetCode 岛屿的最大面积
  5. HDU-1312-Black and Red
  6. 【OS_Linux】Linux 基本命令整理
  7. centos7内核优化
  8. Python9-装饰器进阶-day12
  9. (转)去除背景色的方法,适合iOS5/6/7/8.0beta
  10. 【MySQL】可重复读模式下 unique key失效案例