Linux strace 命令:进程行为追踪与性能诊断神器
【摘要】 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)