linux-sre-handbook

05-性能工具图谱

60 秒快速排查法

当被问到”系统为什么慢”,在 60 秒内依次运行:

# 1. 负载概览
uptime                          # 1/5/15 分钟负载

# 2. 内核错误
dmesg | tail -20                # OOM、硬件错误

# 3. 系统统计
vmstat 1 3                      # CPU、内存、IO、上下文切换

# 4. CPU 明细
mpstat -P ALL 1 3               # 每核心使用率

# 5. 进程 CPU
pidstat 1 3                     # 每进程 CPU、IO、上下文切换

# 6. 磁盘 IO
iostat -x 1 3                   # 每设备 IO

# 7. 内存
free -h                         # 内存和 Swap

# 8. 网络
sar -n DEV 1 3                  # 各接口流量

# 9. TCP 连接
ss -s                           # 连接概要

工具全景图

┌──────────────────────────────────────────────┐
│                  应用层                        │
│  strace  / bpftrace  / perf record           │
│──────────────────────────────────────────────│
│                  系统层                        │
│  top  /  htop  /  vmstat  /  pidstat         │
│  mpstat  /  sar  /  uptime                   │
│──────────────────────────────────────────────│
│                  CPU                           │
│  mpstat  /  perf  /  bpftrace                 │
│──────────────────────────────────────────────│
│                  内存                          │
│  free  /  vmstat  /  pmap  /  smem            │
│  /proc/meminfo  /  slabtop                   │
│──────────────────────────────────────────────│
│                  磁盘 IO                       │
│  iostat  /  iotop  /  pidstat -d             │
│  fio  /  blktrace                            │
│──────────────────────────────────────────────│
│                  网络                          │
│  ss  /  sar -n  /  iftop  /  tcpdump         │
│  ping  /  mtr  /  iperf3                     │
│──────────────────────────────────────────────│
│                  内核                          │
│  perf  /  eBPF(bpftrace)  /  ftrace          │
└──────────────────────────────────────────────┘

工具选择速查

你想知道 用什么
为什么 CPU 飙高 perf top, pidstat 1
什么在吃内存 smem -p, pmap -x PID
磁盘为什么慢 iostat -x 1, iotop
网络连接状况 ss -s, ss -ti, iftop
系统调用开销 strace -c -p PID
内核函数耗时 perf record -g, bpftrace
历史趋势 sar 系列命令
文件系统缓存效率 free -h, /proc/meminfo
进程到底在等什么 cat /proc/PID/wchan, pidstat -w

eBPF/bpftrace — 新一代观测利器

# 统计系统调用
bpftrace -e 'tracepoint:raw_syscalls:sys_enter { @[comm] = count(); }'

# 统计读文件大小分布
bpftrace -e 'tracepoint:syscalls:sys_enter_read \
    { @bytes = hist(args->count); }'

# 进程运行队列延迟
bpftrace -e 'kprobe:finish_task_switch \
    { @runq_lat = hist((nsecs - @start[args->prev->pid]) / 1000); }'

延伸阅读