写在前面:

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

不过,正确的安装姿势应该是:

yum update kernel-*      (没有这个将可能出现很多不必要的麻烦)

reboot

yum install systemstap

stap-prep

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

安装:

yum install systemtap

1

yuminstallsystemtap

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

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

1

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

有错误了:

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

1

2

Checking"/lib/modules/2.6.32-431.el6.x86_64/build/.config"failedwitherror:没有那个文件或目录

Incorrectversionormissingkernel-develpackage,use:yuminstallkernel-devel-2.6.32-431.el6.x86_64

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

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

1

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

其实可以这样:

stap-prep

1

stap-prep

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

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

1

yum--enablerepo=*-debuginfoinstallkernel-debuginfo-3.10.0-327.13.1.el7.x86_64

安装完后再次执行:

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

1

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

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

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

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

globalsyscalllist

probebegin{

printf("System Call Monitoring Started (10 seconds)...\n")

}

probesyscall.*

{

syscalllist[pid(),execname()]++

}

probetimer.ms(10000){

foreach([pid,procname]insyscalllist){

printf("%s[%d] = %d\n",procname,pid,syscalllist[pid,procname])

}

exit()

}

使用场景

看看哪个进程在查询dns

dns.stp:

probe udp.sendmsg {

if ( dport == 53 ) {

printf ("PID %5d (%s) sent UDP to %15s 53\n", pid(), execname(), daddr)

}

}

1

2

3

4

5

probeudp.sendmsg{

if(dport==53){

printf("PID %5d (%s) sent UDP to %15s 53\n",pid(),execname(),daddr)

}

}

参考资料:

systemtap PHP,systemtap初体验相关推荐

  1. 苹果电脑安装python3密码_mac系统安装Python3初体验

    前沿 对于iOS开发不要随便拆卸系统自带的Python,因为有很多 library 还是使用 Python2.7. 1 安装Xcode 1.1 App Store 搜索Xcode 并安装 1.2 安装 ...

  2. MapReduce编程初体验

    需求:在给定的文本文件中统计输出每一个单词出现的总次数 第一步: 准备一个aaa.txt文本文档 第二步: 在文本文档中随便写入一些测试数据,这里我写入的是 hello,world,hadoop he ...

  3. 小程序 缩放_缩放流星应用程序的初体验

    小程序 缩放 by Elie Steinbock 埃莉·斯坦博克(Elie Steinbock) 缩放流星应用程序的初体验 (First Experiences Scaling a Meteor Ap ...

  4. wxWidgets刚開始学习的人导引(3)——wxWidgets应用程序初体验

    wxWidgets刚開始学习的人导引全文件夹   PDF版及附件下载 1 前言 2 下载.安装wxWidgets 3 wxWidgets应用程序初体验 4 wxWidgets学习资料及利用方法指导 5 ...

  5. 用鸿蒙跑了个 “hello world”!鸿蒙开发初体验

    点击上方蓝色"方志朋",选择"设为星标" 回复"666"获取独家整理的学习资料! 来源 | https://my.oschina.net/u ...

  6. Windows Embedded Standard开发初体验(二)

    支持Silverlight的Windows Embedded Standard 好了,完成安装之后,我们就可以来做Windows Embedded Standard的第一个操作系统镜像了.在开始菜单中 ...

  7. 深度探索Hyperledger技术与应用之超级账本初体验(附部署代码)

    2019独角兽企业重金招聘Python工程师标准>>> 本章零基础地介绍了如何快速体验超级账本搭建的区块链网络,我们先绕过了比较复杂的初始化配置,用官方提供的fabric-sampl ...

  8. Spring环境搭建,IoC容器初体验~

    由于最近的任务是关于IoC配置文件格式的转换,所以需要从Spring的IoC容器开始学起,今天根据网上的介绍搭建了Spring环境,并对其IoC容器进行了初体验.文章中涉及到的软件以及推荐的一本关于S ...

  9. 来自新手Banana Pi香蕉派初体验

    2019独角兽企业重金招聘Python工程师标准>>> 一.前言 一段时间来对有强大的技术支持和完善的社区的Raspberry Pi很感兴趣,本想入一片学习学习,但转念一想Raspb ...

  10. 《深入理解Spark:核心思想与源码分析》——1.2节Spark初体验

    本节书摘来自华章社区<深入理解Spark:核心思想与源码分析>一书中的第1章,第1.2节Spark初体验,作者耿嘉安,更多章节内容可以访问云栖社区"华章社区"公众号查看 ...

最新文章

  1. app.vue中引用图片src=“../assets/logo.png“报错未找到图片
  2. 手把手教你做挖矿应急响应
  3. LeetCode 1238. 循环码排列(格雷编码+旋转数组)
  4. XShell笔记-XShell登录脚本的使用
  5. 基于java的机房收费系统_基于Java Socket的高校机房计费管理系统
  6. 谷歌怎么找ajax请求,谷歌浏览器 - GET ajax请求失败
  7. mysql sql trace_SQL_TRACE及 Tkprof用法以及问题分析
  8. android 剪贴板增强工具,剪切板增强工具(ClipboardFusion Pro)
  9. ​LeetCode刷题实战248:中心对称数III
  10. JavaScript同步与异步
  11. 阿里六脉神剑的一些感悟【分享】
  12. 锦州铁路高中2021高考成绩查询入口,锦州高考成绩查询系统
  13. 博文视点官方博客已经开通!
  14. web服务器双机热备方案解析
  15. 卿斯汉:重视云安全 发展云计算
  16. 基于时间轮的定时器HashedWheelTimer
  17. 利用svn的blame功能查出代码的每一行是谁写/改的
  18. [Andriod]Andriod之HelloWorld
  19. pip/conda/venv/virtualenv区别详解
  20. codewars - Human Readable Time

热门文章

  1. 鼠标指向变成英文导航(CSS)_网页代码站(www.webdm.cn)
  2. PTA-7-2 统计字符出现次数 (20分)
  3. android 自定义顶部,Android自定义实现顶部粘性下拉刷新效果
  4. java 类似datatable_在java中实现类似于.net中的DataTable,请各位看看,这种方法可行吗?...
  5. OpenJudge NOI 1.7 32:行程长度编码
  6. 信息学奥赛一本通 1937:【06NOIP普及组】数列 | 洛谷 P1062 [NOIP2006 普及组] 数列
  7. 信息学奥赛一本通(2073:【例2.16 】三角形面积)
  8. C++语言基础 —— 顺序结构
  9. 小球(信息学奥赛一本通-T1363)
  10. 信息学奥赛C++语言:求三角形的面积