-10 +

systemtap

systemtap 介绍

systemtap 可以用于开发者和系统管理员通过编写简单的脚本就可以调试复杂的性能和功能问题。

原理

systemtap 的执行过程:

从上图我们可以看到 systemtap 是将脚本编译成 kernel module 来实现 trace 的。linux 的大部分分发版本的 symbol tables 是删除的。 为了提高 systemtap 的 trace 能力,所以我们要自己提供 debug 相关的信息,基于 RPM 的分发版本使用 -debuginfo 的 rpm 包,如 RHEL 需要 kernel-devel, kernel-debuginfo and kernel-debuginfo-common rpm 包,新版本的 systemtap 现在提供了 stap-prep 工具 来自动安装这些依赖。

systemtap langref

probe 类型

内置函数

内置数据结构

Arrays: 数组类型其实一种 hash table,而且是一种支持多个 key 的 hash table,有点像 awk 中的 array,需要注意的是 hash table 的定义必须在 定义为全局变量,并且在开始运行程序前就要确定这个 table 的大小,默认通过 MAXMAPENTRIES 参数来决定,默认是 2048。arrays 的一些操作:

Aggregates: 聚合统计数据结构,使用 «< 操作符向 aggregates 变量中添加数据,数据只能是数字类型。它只能定义为全局类型的,但是 array 的每个元素可以是一个 aggregates 类型的变量。获取它的值只能通过 @min, @max, @count, @avg, @sum, @hist_log, @hist_linear 来读取值。

stap tips

Q & A

参考

关于我

85 后程序员, 比较熟悉 Java,JVM,Golang 相关技术栈, 关注 Liunx kernel,目前痴迷于分布式系统的设计和实践。 研究包括但不限于 Docker Kubernetes eBPF 等相关技术。

Blog

Code

Life

Archive