线上服务器性能问题排查的核心思路是 USE 法:先看每个资源的 Utilization(利用率)、Saturation(饱和度)、Errors(错误数),再用对应工具深入。本文介绍三大主流工具。
perf_events:CPU 级热点分析
perf 基于 CPU PMU 硬件计数器,开销极低(~2%)。99Hz 采样避开调度周期整倍数获取真实分布。perf stat 看 cache miss、分支预测失败宏观指标;perf record + FlameGraph 生成交互式火焰图。
#!/usr/bin/env bash
set -euo pipefail
LOG=perf-report-$(date +%Y%m%d-%H%M).log
exec > >(tee -a "$LOG") 2>&1
echo "===== [1] CPU TOP functions 30s ====="
perf record -F 99 -a -g -- sleep 30
perf report --stdio -n --sort comm,dso,symbol | head -60
# perf script | FlameGraph/stackcollapse-perf.pl | flamegraph.pl > cpu-flame.svg
echo "\n===== [2] perf stat system-wide ====="
perf stat -a -d -- sleep 10
# 关注 context-switches, cache-misses 比率, stalled-cycles-frontend
echo "\n===== [3] bpftrace: block IO size distribution by comm ====="
bpftrace -e '
tracepoint:block:block_rq_issue { @[comm, args->rwbs[0]] = hist(args->bytes); }
interval:s:15 { printf("\n=== 15s IO hist by process ===\n"); print(@); clear(@); exit(); }
' 2>&1 | head -40 || true
echo "\n===== [4] bpftrace: TCP active connect trace ====="
bpftrace -e '
kprobe:tcp_connect { printf("PID %d (%s) -> %s\n", pid, comm, ntop(args->family, args->daddr)); }
' -c 'curl -s https://example.com >/dev/null' 2>&1 | head -20 || true
echo "\n===== [5] BCC biolatency + tcplife ====="
/usr/share/bcc/tools/biolatency -mF 1 5 || true
# /usr/share/bcc/tools/offcputime -df 5 1 > offcpu.stacks
timeout 15 /usr/share/bcc/tools/tcplife -L -T 2>/dev/null | head -40 || true
echo "\n===== [6] snapshot vmstat slabtop sar ====="
vmstat 1 5
echo "--- slab top ---"
slabtop -o -s c | head -25 || true
echo "--- THP check ---"
grep -E "AnonHugePages|HugePages_Total" /proc/meminfo || true
echo "\nSaved to: $LOG"
bpftrace / BCC:内核事件追踪
eBPF 可在内核函数、tracepoint、USDT 探针挂载自定义 C 程序,安全沙箱化运行。bpftrace 适合一行脚本速查;BCC 是预编译好的 200+ 常用工具,biolatency、offcputime、tcplife 是 IO/阻塞/网络延迟三板斧。
| 资源维度 | 宏观指标(一眼定位) | 微观诊断工具(深入分析) |
|---|---|---|
| CPU | top/vmstat us,sy,wa,st | perf record + FlameGraph |
| 调度延迟 | /proc/schedstat pidstat -w | BCC runqlat bpftrace sched_switch |
| 内存 | free/vmstat si,so sar -r | BCC memleak perf kmem slabtop |
| 磁盘IO | iostat -xz await/util% | BCC biolatency bpftrace block_rq_* |
| 网络延迟 | ss -ti/sar -n TCP,ETCP | BCC tcplife bpftrace tcp:probe |
最佳实践
先宏观再微观:先跑 sar/vmstat 确定是哪类资源问题,再用对应 BCC 工具,最后 perf/bpftrace 自定义追踪。eBPF 权限高,生产先 staging 验证,注意运行时长不超过几分钟。