strace可实时追踪进程与内核的每次交互,如open、read、connect等系统调用,输出调用名、参数及返回值;支持新进程跟踪(strace cmd)、附加运行进程(strace -p pid)、过滤调用(-e trace=...)、耗时分析(-t/-c)及日志保存(-o)。

用 strace 就能直接追踪进程的系统调用过程。它不是看日志、也不是查配置,而是实时捕获进程与内核之间每一次交互——比如打开文件、读写数据、创建子进程、申请内存、收发信号等,所有这些动作都会以清晰的调用名、参数和返回值形式呈现出来。
怎么对新启动的命令做系统调用追踪
在命令前加 strace 即可:
-
strace ls -l /tmp—— 查看ls执行时调用了哪些系统调用 -
strace -T curl -I https://example.com—— 加-T显示每次调用耗时,方便识别慢操作 -
strace -tt -o trace.log nginx -t—— 用-tt带毫秒时间戳,输出存到文件便于后续分析
怎么追踪已在运行的进程
不用重启服务,用 -p 选项绑定 PID:
- 先查 PID:
pidof nginx或pgrep -f "python app.py" - 再追踪:
strace -p 1234(假设 PID 是 1234) - 按
Ctrl+C可随时中止跟踪,进程本身不受影响
怎么聚焦关键系统调用,减少干扰
默认输出太长?用 -e 精准过滤:
-
strace -e trace=open,openat,read,write your_cmd—— 只看文件 I/O 相关调用 -
strace -e trace=connect,sendto,recvfrom ping google.com—— 聚焦网络行为 -
strace -e trace=execve,fork,vfork,clone your_script.sh—— 观察进程创建链路
怎么统计调用频次和耗时分布
加 -c 选项生成汇总报告:
-
strace -c ls /var/log运行完会输出类似: - % time seconds usecs/call calls errors syscall
- 50.23 0.000123 4 30 openat
- 28.11 0.000067 2 35 fstat
- 一眼看出哪个系统调用最频繁、最耗时,是性能瓶颈初筛的有效手段











