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