Linux strace 命令:进程行为追踪与性能诊断神器

举报
yd_232564628 发表于 2026/09/26 10:51:40 2026/09/26
【摘要】 strace 是 Linux 中非常常用的进程行为分析工具,可以直接捕获进程执行过程中的系统调用(如 open、read、write、connect 等)和接收到的信号,用来排查程序为什么卡住、为什么报错、为什么慢、为什么访问不到文件等疑难杂症。 最基础的用法strace ./your_program默认会追踪 ./your_program 执行期间的所有系统调用,并实时输出到终端,包括调用...

strace 是 Linux 中非常常用的进程行为分析工具,可以直接捕获进程执行过程中的系统调用(如 open、read、write、connect 等)和接收到的信号,用来排查程序为什么卡住、为什么报错、为什么慢、为什么访问不到文件等疑难杂症。

最基础的用法

strace ./your_program

默认会追踪 ./your_program 执行期间的所有系统调用,并实时输出到终端,包括调用名称、参数、返回值和耗时。

实际使用中,通常先指定追踪目标

追踪已运行的进程

strace -p 1234

其中 1234 是目标进程的 PID。可以通过 ps aux | grep your_program 或 pgrep your_program 获取 PID。

只追踪特定类型的系统调用

strace -e trace=open,read,write ./your_program

避免输出过多无关调用,聚焦关键操作。比如排查文件访问问题,只追踪 open、stat、access 等调用。

统计系统调用的耗时与频次

strace -c ./your_program

程序结束后会输出一个汇总表,显示每个系统调用的调用次数、总耗时、平均耗时,快速定位性能瓶颈。

将输出保存到文件

strace -o trace.log ./your_program

方便后续用 grep、awk 等工具分析,避免终端输出刷屏。

追踪子进程

strace -f ./your_program

如果程序会 fork 出子进程,加上 -f 可以同时追踪父进程和所有子进程的系统调用,避免遗漏关键行为。

如果不知道从哪入手,可以先执行

strace -e trace=network ./your_program

只追踪网络相关的系统调用(如 socket、connect、sendto、recvfrom),快速判断程序是否在网络层面卡住或报错。
或者

strace -e signal=all ./your_program

查看进程收到了哪些信号(如 SIGSEGV、SIGTERM),排查异常退出或中断问题。

【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0)

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。