跳转到主内容
新派编程网 - 新潮编程理念,全新技术课堂!

怎么在Linux利用Strace-C统计应用程序执行过程中各类系统调用的占比

strace -c 可统计系统调用次数、耗时和错误率,是定位性能瓶颈的常用方法;支持 -f 追踪子进程、-s 指定字符串长度、-o 导出日志、-e trace= 过滤特定调用类型。 直接用
strace -c
就能统计系统调用的执行次数、耗时和错误率,是定位性能瓶颈最常用的方式之一。 基础用法:运行命令并汇总统计 执行目标程序,自动收集所有系统调用的汇总数据:
strace -c ls /tmp
—— 跟踪
ls
执行过程,结束后输出统计表
strace -c ./myapp arg1 arg2
—— 适用于自定义二进制或脚本(需有执行权限) 输出包含:调用次数、总耗时(秒)、时间占比、错误次数、系统调用名称。时间占比一栏直观反映哪类调用最“拖后腿”。 配合 -f 追踪子进程调用(常见于多进程程序) 很多程序会 fork 出子进程(如 Web 服务器、编译工具链),不加
-f
会漏掉它们的系统调用: CentOS Linux 7.9.2009 CentOS Linux 7.9.2009是传统CentOS Linux 7的最后主要版本,也是很多企业历史服务器中仍可能遇到的系统版本。它以稳定、兼容RHEL 7生态、文档丰富和软件支持广泛著称,曾长期用于Web服务、数据库、虚拟化节点和企业内部业务系统。不过CentOS Linux 7已于2024年6月30日停止维护,现在继续使用会面临安全补丁缺失风险。该版本更适合旧业务迁移、历史环境恢复或离线兼容性测试。 下载
strace -c -f curl -s http://example.com > /dev/null
统计结果中会出现
clone
、
wait4
、子进程的
read
/
write
等,更完整反映实际行为 导出到文件 + 指定字符串长度(便于分析长路径/参数) 默认截断字符串为 32 字节,可能看不清关键路径;建议加上
-s
和
-o
:
strace -c -f -s 256 -o trace.log ./app
执行完后,终端只显示汇总表,详细日志存入
trace.log
(含时间戳、调用上下文) 后续可 grep 关键字(如
openat
、
epoll_wait
)辅助判断热点 聚焦特定调用类型(缩小分析范围) 如果已怀疑某类操作异常(比如大量文件打开失败),可用
-e trace=
过滤:
strace -c -e trace=open,openat,close ./app
—— 只统计文件打开关闭相关调用
strace -c -e trace=recvfrom,sendto ./server
—— 针对网络 I/O 场景 注意:
-c
必须与
-e
同时使用才生效,否则过滤无效

相关文章