2025-02-17
SystemTap
是一种用于Linux
系统的动态追踪工具,允许用户监控和分析内核及用户空间程序的运行情况。它通过编写脚本插入探针,实时收集数据,帮助诊断性能问题、调试代码和理解系统行为。
动态追踪:无需重启系统或重新编译内核,即可实时插入探针。
脚本语言:使用类似AWK
的脚本语言,灵活定义追踪逻辑。
内核与用户空间支持:可同时监控内核和用户空间程序。
低开销:设计高效,对系统性能影响小。
stap
:主命令行工具,用于编译和运行脚本。
staprun
:加载和执行编译后的模块。
stap-server
:支持远程执行SystemTap
脚本。
安装:通过包管理器安装SystemTap
和相关内核调试符号。
sudo apt install -y systemtap-runtime systemtap linux-headers-$(uname -r)
编写脚本:使用SystemTap
脚本语言定义追踪逻辑。
运行脚本:使用stap
命令执行脚本,结果可输出到终端或文件。
# 统计丢弃的数据包数量
#!/usr/bin/env stap
global locations
probe begin { printf("Monitoring for dropped packets\n") }
probe end { printf("Stopping dropped packet monitor\n") }
probe kernel.trace("kfree_skb") { locations[$location] <<< 1 }
probe timer.sec(5)
{
printf("\n")
foreach(l in locations-) {
printf("%d packets dropped at %s\n", @count(locations[l]), symname(l))
}
delete locations
}
sudo stap --all-modules stap-demo.stp
希望上面的内容对你有所帮助。