知识点 | linux系统中strace命令讲解

在麒麟(Kylin OS)或其他Linux发行版中,strace 都是一个强大的诊断和调试工具,用于跟踪和分析进程与Linux内核之间的交互,比如它执行了哪些系统调用、消耗了多少时间以及收到了什么信号。这对于排查程序为何启动失败、运行缓慢或异常退出等问题非常有帮助。

图片

两种常见的使用模式

1. 跟踪启动新命令:直接在要运行的命令前加上strace。例如,想了解 ls 命令启动时做了什么,可以执行:strace ls

这会输出ls 命令从启动到结束的完整系统调用序列。

2. 跟踪已运行的进程:对于一个已经在后台运行的程序(比如一个守护进程或服务),可以使用-p 选项附加跟踪。首先用 ps 或 pidof 命令查到进程ID (PID)。执行:strace -p [进程PID]    跟踪期间按Ctrl+C 可以停止。

常用参数介绍:

strace 的参数主要用于控制输出内容和格式。

输出控制

-o [文件名]:将跟踪结果保存到指定文件,方便后续分析。

-s [长度]:设置显示字符串参数的最大长度(默认32字节),避免长内容被截断。

-f:跟踪由目标进程创建的所有子进程,对于多进程程序(如Web服务器)调试至关重要。

时间统计

-T:在每行系统调用末尾显示本次调用花费的时间。

-r:显示每个系统调用之间的相对时间间隔。

-tt / -ttt:在每行前添加精确到微秒的时间戳,用于分析事件发生的绝对时间。

-c:在程序运行结束后,汇总统计各个系统调用的次数、耗时和错误,便于进行性能分析。

调用过滤

-e trace=[类别或调用名]:只跟踪指定的系统调用类别或名称,避免信息过载。

常用类别:file(文件操作)、network(网络)、process(进程管理)、ipc(进程间通信)。

也可指定具体调用,如-e trace=open,read,write。

strace应用场景与案例

场景一:程序启动失败,日志信息模糊

问题:一个服务启动时报错“无法打开日志文件”,但没说明具体路径或原因。

解决:使用strace 启动该程序,在输出中快速查找 open 或 openat 系统调用,通常会清晰地显示出程序试图打开(但失败)的完整文件路径和错误码(如ENOENT表示文件不存在),从而快速定位问题。

场景二:定位性能瓶颈

问题:一个文件上传程序,有时快有时慢,不确定是磁盘读取慢还是网络发送慢。

解决:使用strace -T -p [PID] 跟踪该进程一段时间,或使用 -c 选项进行统计。通过分析 read(读文件)、sendto(网络发送)等关键调用的耗时,可以判断瓶颈在于磁盘I/O还是网络。

场景三:查找程序读取的配置文件

问题:不确定一个程序(如php)到底使用了哪个配置文件。

解决:使用strace [程序名] 2>&1 | grep [文件名关键词]。通过过滤 open 系统调用的输出,可以看到程序尝试打开的所有文件路径。

注意事项:

1. 性能影响:strace 会让被跟踪的进程运行变慢,不建议在生产环境长期或满负荷使用。

2. 输出信息:初期可能觉得输出繁杂,可结合 -e 参数过滤,或从统计模式(-c)开始。

3. 适用边界:strace 主要跟踪“用户态到内核态”的交互(系统调用),对于程序内部的纯逻辑错误(如算法问题),需要配合 gdb 等代码级调试工具。

文章总结:

Strace相当于给程序装了一个“监听器”,专门记录程序与操作系统内核的每一次“对话”(系统调用)。可从一个简单命令开始体验,比如strace -T ls /tmp,观察并理解输出内容。

文章至此。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值