首页/系统/Linux 内核与性能调优速查/perf trace 系统调用追踪

perf trace 系统调用追踪

以低开销方式观测系统调用路径与耗时, 快速浏览进程与内核的交互。

系统调用追踪

系统调用追踪以相对低的开销观察进程与内核的交互:既可以把具体的系统调用逐条打印出来,也可以只输出汇总表,看每类调用的次数与时间。相比传统的追踪工具,它更依赖内核自身的采样与聚合能力,适合先快速看清进程到底在等什么,再决定要不要上更重的工具。

基本信息

适用平台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   # 指定事件族,注意输出量

输出读法

内容含义判读要点
时间戳调用发生时刻与业务日志对齐
进程与线程发起调用的对象确认是否为自己的服务
调用名与参数具体操作参数值异常常指向配置问题
耗时该次调用占用时间长耗时的调用是排查重点
汇总模式比逐条打印更适合高调用量场景:先看每类调用的次数与耗时排名,再针对可疑的那几类做逐条观察。
与传统的逐调用追踪工具混用结论会出错:两者的时间统计口径不同,长耗时判断可能相差明显,最终结论应基于同一工具的前后对比。

易错点

  • 与传统的系统调用追踪工具混用时间数据,得出相互矛盾的长耗时排序。
  • 高频进程不限事件与时长,输出刷屏导致关键信息被淹没。
  • 把系统调用耗时直接当成业务耗时:调度与锁等待可能落在调用之外。
  • 追踪范围开得过大影响目标性能,现场排查反而加重问题。
  • 不留存输出:事后无法复盘调用参数与时间关系。

数据来源与参考

  • man perf-trace
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌