当线上服务出现异常时,常规日志往往难以定位问题根源。这时需要深入内核层面,通过专业工具洞察进程的真实行为。

在Linux性能诊断领域,strace和perf堪称黄金组合:前者可追踪系统调用,后者能分析硬件性能。熟练掌握这两个工具,能解决绝大多数疑难杂症。
这两个工具适用于所有Linux服务器。建议使用Ubuntu 22.04 LTS(内核5.15+)作为实验环境,安装过程如下:
在Ubuntu/Debian系统中执行:
apt install strace -ystrace --version# strace -- version 5.16
由于perf与内核版本绑定,需执行以下步骤:
# 查看内核版本uname -r# 例如:5.15.0-106-generic# 安装对应版本的 perfapt install linux-tools-$(uname -r) linux-tools-generic -y# 验证安装perf --version# perf version 5.15.168
若出现警告提示,可改用通用包安装:
apt install linux-tools-generic -y
要追踪命令的系统调用,执行:
strace ls /tmp
输出格式如下,每行代表一次系统调用:
syscall_name(args...) = return_valueexecve("/usr/bin/ls", ["ls", "/tmp"], ...) = 0brk(NULL) = 0x5610a8c3b000openat(AT_FDCWD, "/etc/ld.so.cache", O_RDONLY|O_CLOEXEC) = 3...
# 获取进程 PIDpgrep nginx# 例如:1234# 附加追踪strace -p 1234
# 只追踪网络相关系统调用strace -e trace=network nginx# 只追踪文件 I/Ostrace -e trace=open,read,write,close -p 1234# 追踪进程与文件系统的交互strace -e trace=file -p 1234
常用过滤类别包括:
network:网络相关调用file:文件操作相关process:进程管理相关memory:内存管理相关signal:信号处理相关当应用报告文件不存在时,可通过以下命令追踪:
strace -e trace=openat,stat -p $(pgrep my-app) 2>&1 | grep -E "(ENOENT|config)"
典型输出会显示应用查找文件的完整路径顺序,帮助准确定位问题。
分析网络超时问题时,使用-T参数显示耗时:
strace -T -e trace=network -p $(pgrep my-service) 2>&1 | grep -E "(connect|poll|select)"
输出结果能清晰展示连接超时的具体位置和时间。
统计30秒内最频繁的系统调用:
timeout 30 strace -c -p $(pgrep nginx) 2>&1
输出报表可帮助识别潜在的性能瓶颈。
perf stat ls /tmpperf stat -p $(pgrep nginx) sleep 10
关键指标包括IPC值、分支预测失误率等,是性能分析的重要参考。
perf topperf top -p $(pgrep nginx)
该命令能实时显示CPU占用最高的函数。
录制带调用图的性能数据:
perf record -g -p $(pgrep my-service) sleep 30perf report --call-graph=graph
火焰图是可视化CPU性能热点的最佳工具,创建步骤如下:
git clone https://github.com/brendangregg/FlameGraph.git /opt/flamegraph
perf record -F 99 -g -p $(pgrep my-service) sleep 60
perf script | /opt/flamegraph/stackcollapse-perf.pl > out.folded/opt/flamegraph/flamegraph.pl out.folded > flamegraph.svg
scp root@server-ip:/root/flamegraph.svg ~/Desktop/
当系统响应延迟但CPU利用率不高时:
perf sched record sleep 10perf sched latency
| 场景 | 推荐工具 | 原因 |
|---|---|---|
| 文件找不到 | strace | 追踪 openat 系统调用 |
| 网络连接失败 | strace | 追踪 connect/poll 行为 |
| CPU 使用率高 | perf top + 火焰图 | 定位热点函数 |
| 响应延迟高但 CPU 不高 | strace -T + perf sched | 找出耗时的系统调用或调度延迟 |
| 缓存命中率低 | perf stat | 查看硬件缓存计数器 |
掌握strace和perf这对黄金组合,能有效解决各类Linux性能问题。前者揭示进程行为,后者分析系统性能,两者结合使用效果更佳。