ITPub博客

首页 > Linux操作系统 > Linux操作系统 > systemtap基础入门

systemtap基础入门

原创 Linux操作系统 作者:myownstars 时间:2013-04-07 17:09:16 0 删除 编辑
stap脚本最终会被解析成c语言并以内核模块的形式加载;
可运行于root用户,也可创建stapdev/stapusr用户组,运行非root用户运行systemtap;
 
Stapdev:其下用户可运行systemtap脚本,也可使用staprun运行SystemTap指令模块
Stapusr:其下用户只能使用staprun运行SystemTap指令模块
 
 
变量
数值类型long -- 64位unsigned integer
字符串
关联数组--
索引项可以是long或string;value值可以是统计数据;
遍历数组
foreach( x in foo)--x为索引项
foreach([s,x] in foo- limit 10)--只取前10个
删除数组 delete arr
删除数组某个元素 delete arr[tid()]
 
统计数据--用于聚集操作,只支持<<<运算符,支持聚集函数@count()/@sum()/@min()/@max(),还支持图形显示hist_linear()/hist_log()
 
支持C语言的语法结构,包括if else/for(,,,)/while(expr)/do {} while(exp)
 
脚本参数
$1..$N用于数字参数;@1..@N字符串参数;$#/@#参数个数
 
 
systemtap脚本分为2部分: probe函数和自定义函数
begin--脚本开始时执行
end--脚本结束时运行
error--因错误终结时运行
 
probe函数主要类型如下
timer
类似定时器,即定时调用该探针,例如timer.s(10)每10秒运行一次
除了秒,还支持jiffies/ms/us/ns,而timer.profile则每个system tick运行一次;
 
内核函数
使用kprobes和kretprobes,
其语法为
kernel.function("FUNC@FILE:LINE")
或
module("NAME").function("FUNC@FILE:LINE")
所有调用该函数的行为都能被探测,其中@FILE和:LINE为可选项;
还支持后缀:.call--默认,探测non-inlined函数;.inline--探测inlined函数;.return,探测non-inlined函数的返回
 
tapsets
为自带函数库,提供一些预定义函数,位于/usr/share/systemtap/tapset,此目录在elaboration阶段会被扫描,也可-I指定其他目录;
syscall.* --探测每个system call,包括name和argstr
 
内置函数
systemtap还有很多内置函数
上下文相关
cpu()--执行当前进程的CPU number
execname()--返回当前执行的进程名
tid()
pid()--当前进程的ID
uid()--当前进程的user id
stp_pid()
backtrace()
pp()
thread_indent()--
probefunc()--返回被探测的函数名
probemod()
字符串相关
strlen()/substr()/isinstr()/strtol()
时间相关
get_cycles()
gettimeofday_s()
gettimeofday_ns()
 
限制
经过解析的脚本需运行于内核空间,而内核栈空间有限;
为内核栈避免溢出和节省系统资源,会有以下限制:
递归调用的深度
数组大小--所有数组都是预分配的,如果太长则会抛出错误
执行时间--自动检测无限循环操作并终结,如while(1) {...}
其它诸如除0操作也会被及时检测
 
 

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/15480802/viewspace-757901/ ,如需转载,请注明出处,否则将追究法律责任。

上一篇: mysqlcheck和myisamchk
下一篇: mysql备份工具
请登录后发表评论 登录
全部评论

注册时间:2010-03-18

  • 博文量
    375
  • 访问量
    3321133