SystemTap是一个系统的跟踪探测工具。它能让用户来跟踪和研究计算机系统在底层的实现。

安装SystemTap需要为你的系统内核安装-devel,-debuginfo,-debuginfo-common包

使用下面的repo可以进行debuginfo的安装

[debuggery]

name=CentOS-$releasever - DebugInfo

baseurl=http://debuginfo.centos.org/$releasever/$basearch/

priority=1

需要理解下面几个名词:

instrumentation module -- 由SystemTap脚本编译的内核模块

host system -- 你编译instrumentation 模块的机器

target system -- 你运行instrumentation 模块的机器

target kernel -- target system的内核模块

你可以在一台机器上为其他机器编译trap模块,在目标机上只要安装systemtap-runtime,在宿主机上使用:

stap -r kernel_version script -m module_name

就能生成module_name.ko模块

然后在目标机上运行staprun module_name.ko就可以执行这个trap

stap命令参数:

-v

提供脚本运行的详细输出,可以使用多个的,比如stap -vv script.stp 输出的信息比stap -v script.stp多

-o filename

将输出存到文件filename中

-S size,count

限制输出的文件大小(兆byte算)和文件数目,多个文件会有后缀

-x process ID

这个processID能从脚本中的target()获取

-c 'command'

将target()函数做重命名

-e 'script'

使用script而不是文件作为输入

-F

使用Flight recorder mode(飞行记录模式),让脚本在后台运行。

我们也可以使用 - 来将标准输入作为stap的输入

echo "probe timer.s(1) {exit()}" | stap -

SystemTap的飞行模式

飞行模式使用-F参数控制的,它并不保存所有的输出,而是只保存最近一段时间的输出,保存的文件大小和文件数量是根据-S来控制的。

飞行模式的监控是运行在后台的。

安装出现问题:

missing x86_64 kernel/module debuginfo

根据这篇文章解决:http://dikar.iteye.com/blog/1477619

SystemTap是如何工作的

每个SystemTap脚本都会创建一个sesssion,这个session按照下面的执行顺序做操作:

1 SystemTap使用tapset库检查这个脚本

2 SystemTap将脚本翻译成C,然后在根据这个C程序生成一个内核模块。(在/tmp/xxxx/xxxx.ko)

3 SystemTap加载这个模块,然后将代码挂载到探针probes(events 和handlers)中

4 当事件发生的时候,相关的代码就执行了

5 当session结束的时候,探针就被销毁

SystemTap的事件可以被归类为两种类型:同步和异步

同步事件包括:

syscall.system_call

vfs.file_operation

kernel.function("function")

kernel.trace("tracepoint")

module("module").function("function")

异步事件包括:

begin

end

timer events

printf

SystemTap知识(一)的更多相关文章

  1. SystemTap知识(二)

    Unbuntu安装systemtap: http://www.cnblogs.com/hdflzh/archive/2012/07/25/2608910.html 1 更新源到http://mirro ...

  2. Linux操作系统

    Linux操作系统 linux源码分析(三)-start_kernel 2016-10-26 11:01 by 轩脉刃, 146 阅读, 收藏, 编辑 前置:这里使用的linux版本是4.8,x86体 ...

  3. 动态追踪技术(中) - Dtrace、SystemTap、火焰图

    http://openresty.org/cn/presentations.html http://weibo.com/agentzh?is_all=1 http://openresty.org/po ...

  4. linux 内核分析工具 Dtrace、SystemTap、火焰图、crash等

    << System语言详解 >> 关于 SystemTap 的书. 我们在分析各种系统异常和故障的时候,通常会用到 pstack(jstack) /pldd/ lsof/ tc ...

  5. 使用动态跟踪技术SystemTap监控MySQL、Oracle性能

    [IT168 技术]本文根据吕海波2018年5月11日在[第九届中国数据库技术大会]上的演讲内容整理而成. 讲师介绍: 吕海波,美创科技研究员,ITPUB管理版版主.出版技术书籍<Oracle内 ...

  6. Httpd服务进阶知识-LAMP源码编译安装

    Httpd服务进阶知识-LAMP源码编译安装 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 想必大家都知道,动态资源交给fastcgi程序处理,静态资源依旧由httpd服务器处理  ...

  7. 你必须知道的EF知识和经验

    注意:以下内容如果没有特别申明,默认使用的EF6.0版本,code first模式. 推荐MiniProfiler插件 工欲善其事,必先利其器. 我们使用EF和在很大程度提高了开发速度,不过随之带来的 ...

  8. MySQL高级知识- MySQL的架构介绍

    [TOC] 1.MySQL 简介 概述 MySQL是一个关系型数据库管理系统,由瑞典MySQL AB公司开发,目前属于Oracle公司. MySQL是一种关联数据库管理系统,将数据保存在不同的表中,而 ...

  9. 学点HTTP知识

    不学无术 又一次感觉到不学无术,被人一问Http知识尽然一点也没答上来,丢人丢到家了啊.平时也看许多的技术文章,为什么到了关键时刻就答不上来呢? 确实发现一个问题,光看是没有用的,需要实践.看别人说的 ...

随机推荐

  1. MAC下的命令操作

    打印环境变量:echo $PATH设置环境变量:export PATH=$PATH:/usr/local/git/bin应用:在git-scm下载git2.0.1版本,图形安装后,直接在终端敲giv ...

  2. 进程、线程、轻量级进程、协程与 go 的 goroutine【转载+整理】

    本文内容 进程 线程 协程 Go 中的 goroutine 参考资料 最近,看一些文章,提到"协程"的概念,心想,进程,线程,协程,前两个很容易,任何一本关于操作系统的书都有说,开 ...

  3. std::bind和std::function

    std::bind 用于绑定一个函数,返回另外一种调用方式的函数对象 ,可以改变参数顺序 和个数,特别是在多线程的程序中,经常用它将函数进行包装,然后打包发送给工作线程,让工作线程去执行我们的任务. ...

  4. C# HttpWebRequest 绝技 根据URL地址获取网页信息

    如果要使用中间的方法的话,可以访问我的帮助类完全免费开源:C# HttpHelper,帮助类,真正的Httprequest请求时无视编码,无视证书,无视Cookie,网页抓取 1.第一招,根据URL地 ...

  5. ECSHOP会员登录后直接进用户中心

    ECSHOP系统在会员登录成功后,不是直接进入用户中心,而是跳转回了上一个页面或者是跳转到了首页. 注意:这里说的是,用户没有主动点击前往哪个页面,让系统自动跳转. 那如何让会员登录成功后自动进入“用 ...

  6. 多个App间传递数据

    平台:Android两个App:A,B:需求:在A中点击一个按钮后,启动B并把数据从A传递到B: 代码: App A: MainActivity.java中添加: Button btn2 = (But ...

  7. njoj 1251 zlly长了一张包子脸

    njoj 1251 zlly长了一张包子脸 题意: zlly长了一张包子脸.他特别喜欢吃糖果.如今他手头有若干种糖果,每种糖果有个口味值,每种糖果有无数多个.然后娄童鞋也很喜欢吃糖果.他的口味特别广泛 ...

  8. 给MySQL官方提交的bug report备忘

    1.  Bug #72215 When LOCK_plugin conflicts very much, one uninstall-audit-plugin operation crash  htt ...

  9. 删除数据库数据,自增id清理

    方法一:Delete Form 表名 方法二:TRUNCATE TABLE 在功能上与不带 WHERE 子句的 DELETE 语句相同:二者均删除表中的全部行.但 TRUNCATE TABLE 比 D ...

  10. mac vim 使用

    再使用Mac编辑文件时感觉非常不爽,没有语法高亮,只能通过设置改变所有字体为同一个颜色,看起来还是别扭, 于是找到方法使用vim时可以实现语法高亮显示,操作步骤如下: 1.进入/usr/share/v ...