文档章节

systemtap-快速入门指南

安静美男子
 安静美男子
发布于 2015/07/15 15:39
字数 694
阅读 214
收藏 2

1.Systemtap快速开始

1.1  Systemtap安装

为了安装systemtap,需要安装Kernel相关的-devel,-debuginfo和-debuginfo-comon 包。

# yum install kernel-debuginfo kernel-debuginfo-common kernel-devel
# yum install systemtap systemtap-runtime

1.2Systemtap 测试

执行下面的测试命令,如果正常运行说明systemtap可以正常使用。

# stap -v -e 'probe vfs.write {printf("write performed\n"); exit()}'
Pass 1: parsed user script and 96 library script(s) using 198528virt/26496res/3076shr/24132data kb, in 180usr/20sys/198real ms.
Pass 2: analyzed script: 1 probe(s), 1 function(s), 3 embed(s), 0 global(s) using 438212virt/134360res/8536shr/123624data kb, in 1680usr/330sys/2019real ms.
Pass 3: translated to C into "/tmp/stapqH4Ifk/stap_6c286231c95180fb28a26c9f74999f5c_1331_src.c" using 428112virt/130264res/7124shr/123624data kb, in 10usr/0sys/5real ms.
Pass 4: compiled C into "stap_6c286231c95180fb28a26c9f74999f5c_1331.ko" in 1610usr/230sys/1872real ms.
Pass 5: starting run.
write performed
Pass 5: run completed in 10usr/20sys/345real ms.

备注:probe  event{ code}  生成一个监控vfs.write事件的探针(probe),花括号内表示事件触发时候的动作。

2.Systemtap原理

systemtap 利用用户自定义脚本深度跟踪linux Kernel的行为。利用它可以诊断复杂的系统性能问题。其基本原理利用探测脚本监视内核行为,并作出相应的操作。运行stap脚本后会生成一个systemtap session。Session按照下面的步骤生成:

2.1  parsed

    systemtap 首先检查/usr/share/systemtap/tapset/目录下已经定义好的tap脚本,将定义的事件替换为相应的systemtap脚本库片段。

2.2translated

将tap脚本翻译成c代码,并由c编译器编译成内核模块.ko文件。

2.3load module

systemtap将.ko加载到内核中运行

2.4执行用户自定义动作

当tap脚本中event被触发时,执行相应的操作。

2.5unload  module

当一个systemtap session中断(exit)时,systemtap将模块从内核中卸载。

3.Systemtap脚本

3.1 脚本格式

# probeevent {statements}

备注:当然systemtap可以将多个probe的公共statement抽离成函数。其格式

# function function_name(arguments) {statements}
probe event {function_name(arguments)}

  3.2 event

    Systemtap event分为两类:一种是调用内核函数,另一种是内核函数返回。我的理解是前一种是可以探测函数内部,后一种是探测函数的返回结果。下表列举了一些常见的探针事件。

Event 

说明

syscall.system_call       系统调用是触发
vfs.file_operation

vfs操作是触发

kernel.function("function")

内核函数调用时候触发

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

调用模块中某个函数时触发

begin

执行脚本时触发

end

结束脚本时触发


 3.3 statements

   Systemtap statements的语法类似C语言。可以定义变量,无需声明类型。常见的表达式:

if (condition)
  statement1
else
  statement2
while (condition)
  statement
for (initialization; conditional; increment) statement
foreach (VAR in ARRAY) {}
initialization
while (conditional) {
   statement
   increment
}

4. 参考资料

https://sourceware.org/systemtap/SystemTap_Beginners_Guide/

© 著作权归作者所有

安静美男子
粉丝 19
博文 30
码字总数 18579
作品 0
成都
程序员
私信 提问
使用 SystemTap 调试内核

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

红薯
2009/09/15
2.5K
0
systemtap系列之SYSTEMTAP介绍

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

binarydady
01/03
0
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 3.1 发布,Linux 内核诊断

SystemTap 3.1 发布了,它允许在运行时从内核以及各种用户空间程序中提取性能和调试信息。 本次更新引入了以下的新特性: 支持为 Python 2 和 3 函数添加探针 Java 探针现在会在将所有参数传...

局长
2017/02/18
505
1

没有更多内容

加载失败,请刷新页面

加载更多

对比ubuntu与centos系统 ​​​​

CentOS与Ubuntu该如何选择,哪个更好用。笔者在自媒体平台收集了一些网友的观点,较为经典,分享给大家。至于应该选择哪个,希望看完本文章后,读者心中有数。 观点1:CentOS适用于服务器,U...

老孟的Linux私房菜
今天
13
0
Java的基本类型

一、Java的基本类型 Java的基本类型有哪些? boolean char byte short int long float double ? 延伸思考 思考一:为什么有的书籍说Java存在第9种数据类型? 实际上,JAVA中还存在另外一种基...

yumoop
今天
14
0
OSChina 周四乱弹 —— 富婆小时候

Osc乱弹歌单(2019)请戳(这里) 【今日歌曲】 @猿敲月下码 :#今日歌曲推荐# 分享陈慧娴的单曲《夜机》 《夜机》- 陈慧娴 手机党少年们想听歌,请使劲儿戳(这里) @開源中國張學友 :早上...

小小编辑
今天
26
0
MyMinimad ── Linux下用libmad写的mp3解码播放程序(四)

优化了内存使用,不再使用mmap映射整个文件到内存 /* * 本程序是从 minimad 改进而来,如要更详细的说明请参看 minimad.c * * Gu Zhou, 2009/12/25, SiChuan University, China *...

代码强国
今天
18
0
Minikube安装

1、下载Minikube二进制文件 sudo curl -Lo minikube https://kubernetes.oss-cn-hangzhou.aliyuncs.com/minikube/releases/latest/minikube-linux-amd64 2、设置权限 sudo chmod +x minikube......

RogueQ
今天
11
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部