2026-07-03 23:32:33
1. 测量总耗时
time <command>
观察 real 值,确认慢的程度。
2. 追踪系统调用(核心)
strace -f -T -tt -o strace.log <command>
参数说明:-f 跟踪子进程,-T 显示每个调用耗时(微秒),-tt 加时间戳。
3. 快速分析日志
# 找出耗时最长的系统调用
awk '{if ($NF ~ /^[0-9.]+$/) print $NF, $0}' strace.log | sort -nr | head -10
# 查看执行了哪些外部命令(关键)
grep execve strace.log
重点关注:wait4(等待子进程)、openat/stat(文件访问)、connect(网络),以及 execve 调用的外部命令。
4. 单独测试可疑子进程 若发现调用了某个命令(如 nvidia-modprobe),直接运行:
time /usr/bin/可疑命令
echo $? # 非0表示执行失败,可能导致父进程超时等待或重试
5. 处理“strace 时反而变快”的迷惑现象
可能原因:strace 改变了信号(如
SIGWINCH)和子进程的调度时序,掩盖了真实延迟。可尝试强制 tty
模式或禁用交互式检测(如 btop -t)来验证。
6. 永久修复
根据定位结果,在配置文件中禁用相关功能(如
gpu_monitoring=false)或安装缺失依赖。若暂时无法修复,可用命令行参数或环境变量绕过耗时探测。
一句话总结:strace -f 抓 execve → 看子进程 → 单独测子进程 → 禁用或修复 → 恢复秒开。