系统调用追踪
系统调用追踪以相对低的开销观察进程与内核的交互:既可以把具体的系统调用逐条打印出来,也可以只输出汇总表,看每类调用的次数与时间。相比传统的追踪工具,它更依赖内核自身的采样与聚合能力,适合先快速看清进程到底在等什么,再决定要不要上更重的工具。
基本信息
| 适用平台 | Linux(内核自带性能工具) |
|---|---|
| 常用选项 | 限定进程、限定事件、汇总输出、整机范围 |
| 输出形式 | 逐条事件或调用汇总表 |
| 权限要求 | 追踪系统调用通常需要较高权限 |
| 口径差异 | 与传统的系统调用追踪工具机制不同,时间统计不能混用 |
典型使用场景
- 进程响应慢,先确认是否卡在某个系统调用上。
- 排查配置文件读取、临时文件创建等低频文件操作。
- 用汇总视图看调用次数分布,找出被高频调用的接口。
- 现场应急时快速判断问题在应用逻辑还是内核交互。
- 与传统的逐调用追踪工具交叉验证,避免单一工具偏差。
用法
用法
perf trace -p 12345 # 跟随指定进程的系统调用
perf trace -e openat,connect,read -p 12345 -- sleep 5 # 只看关心的调用
perf trace -s -p 12345 -- sleep 5 # 汇总表:次数与耗时分布
perf trace -a -- sleep 5 # 整机范围,观察整体交互
perf trace -t 12346 -- sleep 5 # 只跟随指定线程
perf trace -e 'syscalls:*' -p 12345 -- sleep 2 | head -30 # 指定事件族,注意输出量输出读法
| 内容 | 含义 | 判读要点 |
|---|---|---|
| 时间戳 | 调用发生时刻 | 与业务日志对齐 |
| 进程与线程 | 发起调用的对象 | 确认是否为自己的服务 |
| 调用名与参数 | 具体操作 | 参数值异常常指向配置问题 |
| 耗时 | 该次调用占用时间 | 长耗时的调用是排查重点 |
汇总模式比逐条打印更适合高调用量场景:先看每类调用的次数与耗时排名,再针对可疑的那几类做逐条观察。
与传统的逐调用追踪工具混用结论会出错:两者的时间统计口径不同,长耗时判断可能相差明显,最终结论应基于同一工具的前后对比。