概述

性能诊断是 SRE 的核心技能。Linux 提供了丰富的性能分析工具,从简单的 top 到强大的 perf/eBPF,每个工具都有其适用场景。掌握这些工具的使用时机和方法,是快速定位性能瓶颈的关键。本文按 CPU、内存、IO、网络和综合工具五大维度,逐步梳理 Linux 性能诊断工具集,并提供使用场景速查表和实战案例。

负载监控工具

top:经典进程监控

$ top
# 顶部摘要信息
top - 15:30:00 up 30 days,  3:21,  3 users,  load average: 1.23, 0.98, 0.85
Tasks: 234 total,   1 running, 233 sleeping,   0 stopped,   0 zombie
%Cpu(s): 12.3 us,  3.4 sy,  0.0 ni, 83.3 id,  0.5 wa,  0.0 hi,  0.5 si,  0.0 st
MiB Mem :  32000.0 total,  5000.0 free, 15000.0 used, 12000.0 buff/cache
MiB Swap:   4096.0 total,   3900.0 free,    196.0 used.  20000.0 avail Mem

# 进程列表
  PID USER      PR  NI    VIRT    RES    SHR S  %CPU  %MEM     TIME+ COMMAND
12345 root      20   0   12.5g   6.2g  12345 S   150   19.2   120:34 java
12346 www-data  20   0  500.0m 100.0m  20000 S    15    0.3     5:23 nginx

top 交互命令

按键功能
P按 CPU 占用排序
M按内存占用排序
N按 PID 排序
T按运行时间排序
1展开各 CPU 核心详情
H显示线程而非进程
c显示完整命令行
f选择显示字段
W保存配置
k杀死进程
r修改 nice 值
z彩色显示

top 关键字段解读

load average: 1.23, 0.98, 0.85
# 1分钟/5分钟/15分钟平均负载
# 负载 ≠ CPU 使用率,包含等待 CPU、IO、锁的进程

%Cpu(s): 12.3 us, 3.4 sy, 0.0 ni, 83.3 id, 0.5 wa, 0.0 hi, 0.5 si, 0.0 st
# us: 用户态 CPU
# sy: 内核态 CPU
# ni: nice > 0 的进程 CPU
# id: 空闲
# wa: IO 等待
# hi: 硬中断
# si: 软中断
# st: 被虚拟化层偷走的时间

htop:交互式进程监控

$ apt install htop    # Debian/Ubuntu
$ dnf install htop     # RHEL/CentOS

$ htop
# 比 top 更友好的界面:
# - 彩色 CPU 核心可视化
# - 进程树视图
# - 鼠标支持
# - 快捷键操作

htop 常用操作

按键功能
F5树形视图
F6排序
F7/F8降低/提高 nice 值
F9发送信号
F10退出
t树形显示
H显示/隐藏线程
Tab切换进程所有者

htop 配置

# ~/.config/htop/htoprc
# 或通过 F2 设置:
# - 显示字段
# - 颜色方案
# - 更新频率
# - CPU 平均值显示方式

atop:全系统性能监控

$ apt install atop
$ dnf install atop

$ atop 1    # 每秒刷新

atop 的优势在于能看到进程级别的资源消耗,包括磁盘 I/O 和网络:

ATOP - server                2026/07/10  15:30:00                -------------------
1m                          5m                          15m
cpu  sys  30%  user 50%     sys 25%  user 45%           sys 20%  user 40%
cpu  irq   2%  idle 18%     irq  1%  idle 29%           irq  1%  idle 39%
cpu  wait  0%               wait  0%                    wait  0%

DISK  busy  read  write  |  busy  read  write  |  busy  read  write
sda    45%   12K   345K  |   30%   10K   300K  |   25%    8K   250K

NET   transport  receive  send  |  transport  receive  send
eth0    1234/s    100KB   50KB |    1000/s     80KB   40KB

PID    USER    CPU%  MEM%  DSK%  NET%  COMMAND
12345  root     150    19    5     1  java
12346  www       15     0    2     0  nginx

常用 top 技巧

# 批处理模式(适合脚本)
$ top -b -n 1 -c | head -20

# 监控特定进程
$ top -p 12345,12346

# 指定刷新次数
$ top -n 5

# 输出到文件
$ top -b -n 10 -d 5 > top-output.txt

# 只看 CPU 占用前 10
$ top -b -n 1 -o %CPU | head -17

CPU 分析工具

vmstat:系统级 CPU/内存概览

$ vmstat 1 5
procs -----------memory---------- ---cpu----
 r  b   swpd   free   buff  cache  si  so    us  sy  id  wa  st
 2  0  100000  5G     2G     10G    0   0    30  10  55   5   0
 1  0  100000  5G     2G     10G    0   0    35  12  50   3   0
字段说明关注点
r运行队列长度> CPU 核数说明 CPU 瓶颈
b阻塞进程数> 0 说明有 IO 等待
us用户态 CPU高说明应用 CPU 密集
sy内核态 CPU> 20% 说明系统调用频繁
id空闲 CPU低说明 CPU 瓶颈
waIO 等待> 5% 说明 IO 瓶颈
si/soswap 换入/换出> 0 说明内存不足

mpstat:多核 CPU 统计

$ apt install sysstat
$ mpstat -P ALL 1 5
# -P ALL 显示所有 CPU 核心

10:00:01 AM  CPU   %usr   %nice   %sys   %iowait   %irq   %soft   %steal   %idle   %gnice
10:00:02 AM  all   30.5    0.0    8.2      0.5      0.0     0.3      0.0     60.5    0.0
10:00:02 AM    0   55.0    0.0   10.0      0.0      0.0     0.0      0.0     35.0    0.0
10:00:02 AM    1    5.0    0.0    3.0      0.0      0.0     0.0      0.0     92.0    0.0
# CPU 0 负载高,CPU 1 空闲 → 负载不均

pidstat:进程级 CPU 统计

# 查看所有进程 CPU 使用
$ pidstat 1 5

# 查看特定进程
$ pidstat -p 12345 1 5

# 查看线程级 CPU
$ pidstat -p 12345 -t 1 5

# 查看进程上下文切换
$ pidstat -w 1 5

# 查看进程的 CPU 使用分布
$ pidstat -p 12345 -u -t 1

perf:Linux 性能分析利器

# 安装
$ apt install linux-tools-common linux-tools-$(uname -r)
$ dnf install perf

# 查看 CPU 占用最高的函数
$ perf top

# 记录 10 秒的 CPU 事件
$ perf record -a -g -- sleep 10

# 查看报告
$ perf report

# 统计 CPU 周期
$ perf stat -a -- sleep 10

# 追踪特定进程
$ perf record -p 12345 -g -- sleep 10
$ perf report

perf 常用事件

# 查看可用事件
$ perf list

# 常用硬件事件
$ perf stat -e cycles,instructions,cache-misses,branch-misses -- sleep 10

# 常用软件事件
$ perf stat -e context-switches,cpu-migrations,page-faults -- sleep 10

# 追踪系统调用
$ perf trace -p 12345

# 追踪特定系统调用
$ perf trace -e read,write -p 12345

perf record 详细用法

# 记录调用栈
$ perf record -g -p 12345 -- sleep 30

# 记录指定事件
$ perf record -e cpu-clock -g -p 12345 -- sleep 30

# 记录所有 CPU
$ perf record -a -g -- sleep 10

# 指定采样频率
$ perf record -F 99 -g -p 12345 -- sleep 30
# -F 99: 每秒采样 99 次

# 记录到指定文件
$ perf record -o perf.data -g -p 12345 -- sleep 30

# 分析
$ perf report --sort overhead,symbol

Flame Graph:火焰图

# 安装 flamegraph 工具
$ git clone https://github.com/brendangregg/FlameGraph.git
$ cd FlameGraph

# 1. 使用 perf 采集数据
$ perf record -F 99 -a -g -- sleep 30
$ perf script > out.perf

# 2. 生成火焰图
$ ./stackcollapse-perf.pl out.perf > out.folded
$ ./flamegraph.pl out.folded > flamegraph.svg

# 3. 在浏览器中打开 flamegraph.svg

火焰图解读

              ┌───[func_c]──────┐
              │                  │
         [func_b]           [func_d]
         [func_a]
         [main]
  • 宽度 = 函数占用 CPU 的比例
  • 高度 = 调用栈深度
  • 颜色 = 随机(无特定含义,On-CPU 图通常暖色)
  • 平顶 = CPU 热点函数

不同类型的火焰图

类型采集方式用途
On-CPUperf recordCPU 热点分析
Off-CPUeBPF/offcputimeIO/锁等待分析
Memoryperf record -e minor-faults内存分配分析
System Callperf trace系统调用分析

eBPF/bcc 工具

# 查看进程 on-CPU 时间
$ /usr/share/bcc/tools/profile.py -p 12345 -F 99 --duration 10

# 查看进程 off-CPU 时间
$ /usr/share/bcc/tools/offcputime -p 12345 10

# 查看系统调用
$ /usr/share/bcc/tools/trace.py 'SyS_*'

# 查看 CPU 热点
$ /usr/share/bcc/tools/profile.py -af

# 查看上下文切换
$ /usr/share/bcc/tools/stackcount.py t:sched:sched_switch

内存分析工具

free:内存概览

$ free -h
              total        used        free      shared  buff/cache   available
Mem:           32Gi       15Gi       5Gi       200Mi       12Gi        16Gi
Swap:          4Gi        196Mi       3.9Gi

# 关键字段:
# total: 总内存
# used: 已使用(不含 buff/cache)
# free: 完全空闲
# buff/cache: 内核缓存(可回收)
# available: 应用可用内存(free + 可回收的 buff/cache)

重要:判断内存是否不足,看 available 而非 freefree 少但 available 充足是正常的。

/proc/meminfo:详细内存信息

$ cat /proc/meminfo
MemTotal:       33554432 kB
MemFree:         5242880 kB
MemAvailable:   16777216 kB    # 应用可用
Buffers:         2097152 kB    # 块设备缓冲
Cached:         10485760 kB    # Page Cache
SwapCached:        200704 kB    # Swap 中的缓存
Active:         12582912 kB    # 活跃内存
Inactive:        4194304 kB    # 非活跃内存
SwapTotal:       4194304 kB
SwapFree:        3997696 kB
Dirty:              1024 kB    # 脏页
AnonPages:       8388608 kB    # 匿名页(应用内存)
Slab:            2097152 kB    # Slab 缓存
SReclaimable:    1572864 kB    # 可回收 Slab
SUnreclaim:       524288 kB    # 不可回收 Slab

vmstat:内存与交换

$ vmstat 1 5
procs -----------memory---------- ---cpu----
 r  b   swpd   free   buff  cache  si  so    us  sy  id  wa  st
 1  0  200000  5G     2G     10G    0   0    30  10  55   5   0
 2  1  200000  4.5G   2G     10G    5   0    40  15  40   5   0
# si > 0: 正在从 swap 换入 → 内存不足
# so > 0: 正在向 swap 换出 → 内存不足
# b > 0: 有进程在等待 IO → 可能是 swap IO

pmap:进程内存映射

# 查看进程内存映射
$ pmap -x 12345 | tail -5
# 输出:地址 大小 RSS 脏页 权限 描述

# 查看内存映射概要
$ pmap -x 12345 | tail -1
total          12345678  6789012  123456

# 排序查看最大映射
$ pmap -x 12345 | sort -k3 -n -r | head -10

# 查看共享库
$ pmap 12345 | grep ".so" | sort -k2 -n -r

smaps:详细内存映射

# 查看进程的详细内存映射
$ cat /proc/12345/smaps_rollup
Rss:           6553600 kB    # RSS
Pss:           6291456 kB    # 比例分摊
Private_Clean:   10240 kB
Private_Dirty: 5242880 kB    # 私有脏页(关注此项是否持续增长)
Shared_Clean:    51200 kB
Shared_Dirty:    20480 kB
Anonymous:     5242880 kB    # 匿名内存

# 查看特定映射区域
$ cat /proc/12345/smaps | grep -A 15 "heap"

sar:历史内存数据

# 查看内存使用趋势
$ sar -r 1 5
#  KBMEMFREE KBMEMUSED %MEMUSED KBBUFFERS   KBCACHED  KBSSWAPUSED
#   5242880   28311552   84.38   2097152   10485760       200704

# 查看交换活动
$ sar -W 1 5
#  pswpin/s pswpout/s
#        0         0  # 无 swap 活动

# 查看分页活动
$ sar -B 1 5
#  pgpgin/s pgpgout/s   fault/s  majflt/s  pgfree/s
#        0        0    1234.56      0.00    5678.90

# 查看历史数据
$ sar -r -f /var/log/sa/sa10   # 10 号的数据
$ sar -r -s 09:00:00 -e 12:00:00  # 指定时间段

IO 分析工具

iostat:磁盘 IO 统计

$ iostat -xdm 1 5
# -x: 扩展统计
# -d: 仅设备
# -m: 以 MB 为单位

Device:  rrqm/s  wrqm/s   r/s    w/s   rMB/s   wMB/s  avgrq-sz  avgqu-sz  await  %util
sda        0.5     2.0   50.0  100.0   2.5     5.0      50.0       1.5     10.0   75.0
nvme0n1    0.0     0.5  200.0   50.0   1.0     0.25      5.0       0.1      0.5   12.0
字段说明关注点
r/s w/s每秒读/写 IOPS评估负载
rMB/s wMB/s每秒读/写吞吐评估带宽
avgrq-sz平均请求大小(扇区)小=随机 IO,大=顺序 IO
avgqu-sz平均队列长度> 1 说明有积压
await平均 I/O 延迟(ms)SSD < 5ms,HDD < 20ms
%util设备利用率> 80% 说明接近瓶颈

注意%util 在多队列设备(NVMe)上可能误导。当 I/O 速率很高但 await 很低时,即使 %util=100% 也不一定有瓶颈。

iotop:进程级 IO 监控

$ apt install iotop
$ iotop -o    # 只显示有 IO 的进程
$ iotop -oP   # 只显示进程(非线程)

Total DISK READ:    50.0 M/s | Total DISK WRITE:    20.0 M/s
  PID  PRIO  USER     DISK READ  DISK WRITE  SWAPIN    IO>    COMMAND
12345  be4  root     45.0 M/s    5.0 M/s     0.00 %  90.0 %  dd if=/dev/zero of=/tmp/test
12346  be4  www      2.0 M/s    10.0 M/s     0.00 %  15.0 %  nginx: worker

pidstat:进程级 IO 统计

# 查看 IO 统计
$ pidstat -d 1 5
#  PID   kB_rd/s   kB_wr/s kB_ccwr/s iodelay  Command
# 12345  46080.00   5120.00      0.00       0  dd

# 组合 CPU + IO + 内存
$ pidstat -urd 1 5

biolatency/biotop(eBPF)

# 查看块 IO 延迟分布
$ /usr/share/bcc/tools/biolatency 10

# 查看进程 IO 吞吐排行
$ /usr/share/bcc/tools/biotop 10 1

# 查看哪些进程在等待 IO
$ /usr/share/bcc/tools/biosnoop 10

# 查看文件 IO 延迟
$ /usr/share/bcc/tools/filetop 10 1

网络分析工具

# iftop:网络流量监控
$ iftop -i eth0 -n

# nethogs:进程级网络流量
$ nethogs eth0

# ss:连接状态统计
$ ss -s                          # 概要
$ ss -tn state established | wc -l  # 活跃连接数
$ ss -tn state time-wait | wc -l   # TIME_WAIT 数

# sar:网络统计
$ sar -n DEV 1 5                 # 网卡流量
$ sar -n TCP 1 5                 # TCP 统计
$ sar -n SOCK 1 5                # Socket 统计

# tcpdump:抓包
$ tcpdump -i eth0 -nn port 443 -c 1000 -w capture.pcap
$ tcpdump -i eth0 -nn 'tcp[tcpflags] & tcp-syn != 0'  # 只看 SYN

# iperf3:网络吞吐测试
$ iperf3 -c target -P 10 -t 60  # 10 并发连接测 60 秒

综合工具

sar:系统活动报告

sar 是最全面的系统性能历史数据工具,适合趋势分析和事后排查。

# 安装
$ apt install sysstat
$ dnf install sysstat

# 启用数据采集
# /etc/default/sysstat
ENABLED="true"
$ systemctl enable --now sysstat

sar 常用选项

# CPU 使用率
$ sar -u 1 5                    # 实时
$ sar -u -f /var/log/sa/sa10   # 10 号的数据

# 各 CPU 核心使用率
$ sar -P ALL 1 5

# 内存使用
$ sar -r 1 5

# 交换活动
$ sar -W 1 5

# 磁盘 IO
$ sar -d 1 5                    # 设备级
$ sar -p -d 1 5                 # 显示设备名

# 网络流量
$ sar -n DEV 1 5
$ sar -n EDEV 1 5              # 网卡错误

# TCP 统计
$ sar -n TCP 1 5
$ sar -n ETCP 1 5              # TCP 错误

# 上下文切换
$ sar -w 1 5

# 中断
$ sar -I SUM 1 5

# 文件操作
$ sar -v 1 5

# 历史数据查询
$ sar -u -f /var/log/sa/sa10 -s 09:00:00 -e 12:00:00

sar 数据文件管理

# 数据文件位置
$ ls /var/log/sa/
sa01  sa02  ... sa10  sa11  ...  sa31
# sa10: 10 号的二进制数据
# sar10: 10 号的文本数据(如果配置了 sa2 脚本)

# 配置数据保留
# /etc/sysconfig/sysstat 或 /etc/default/sysstat
HISTORY=7          # 保留 7 天
COMPRESSAFTER=15   # 15 天后压缩

dstat:多维度实时监控

$ apt install dstat
$ dstat -tcdnym --top-cpu --top-mem --top-io
# 同时显示: 时间 CPU 磁盘 网络 内存 + CPU/内存/IO 最高的进程

# 常用组合
$ dstat -cdnm               # CPU 磁盘 网络 内存
$ dstat --disk-util         # 磁盘利用率
$ dstat --tcp               # TCP 状态
$ dstat --fs                # 文件系统
$ dstat --unix              # Unix Socket
$ dstat --output stats.csv  # 输出到 CSV

sysstat 工具集

# pidstat: 进程统计
$ pidstat -u 1              # CPU
$ pidstat -r 1              # 内存
$ pidstat -d 1              # IO
$ pidstat -w 1              # 上下文切换

# cifsiostat: CIFS 统计
$ cifsiostat 1

# nfsiostat: NFS 统计
$ nfsiostat 1

使用场景速查表

CPU 相关问题

现象首选工具次选工具关键指标
CPU 使用率高top/htopperf top%CPU > 80%
CPU 负载高但使用率低vmstatpidstat -wr > 核数, wa 高
CPU 使用不均mpstat -P ALLtop + 按 1各核差异大
找 CPU 热点函数perf recordflamegraphoverhead%
进程 CPU 异常高pidstat -uperf record -p%CPU 趋势
上下文切换过多pidstat -wvmstatcswch/s > 50000
调度延迟perf schedrunqlat (bcc)延迟 > 10ms

内存相关问题

现象首选工具次选工具关键指标
内存不足free -hvmstatavailable 低
OOM Killerjournalctl -kdmesg“Out of memory”
内存泄漏pmap -xsmaps_rollupRSS 持续增长
swap 频繁vmstatsar -Wsi/so > 0
进程内存明细pmap -x/proc/PID/smapsPrivate_Dirty
Page Cache 占用高free -h/proc/meminfoCached + SReclaimable
内存分配追踪perf record -e kmemmemleak (bcc)分配调用栈

磁盘 IO 问题

现象首选工具次选工具关键指标
IO 延迟高iostat -xbiolatency (bcc)await > 20ms
IO 吞吐低iostat -xbiotop (bcc)rMB/s + wMB/s
找 IO 大户iotoppidstat -dkB_rd/s + kB_wr/s
IO wait 高top/vmstatiostatwa > 5%
文件级 IOfiletop (bcc)opensnoop (bcc)读/写次数
IO 队列积压iostat -xvmstatavgqu-sz > 1

网络问题

现象首选工具次选工具关键指标
网络延迟高pingtcpdumpRTT
吞吐低iperf3sar -n DEV带宽
连接数高ss -ssar -n SOCKestablished 数
TIME_WAIT 多ssnetstattime-wait 数
丢包ifconfigsar -n EDEVdrops/errors
找流量大户nethogsiftop进程级流量
TCP 重传ss -tinstatretransRate
抓包分析tcpdumpwireshark包内容

实战案例

案例 1:CPU 使用率飙升排查

# 1. 发现 CPU 100%
$ top
# PID 12345 (java) CPU 200%

# 2. 查看是用户态还是内核态
$ pidstat -p 12345 -u 1 5
# %usr 150% %sys 50% → 用户态为主

# 3. 查看线程级 CPU
$ top -H -p 12345
# PID 12350 (java) CPU 100%

# 4. 采集火焰图
$ perf record -F 99 -p 12350 -g -- sleep 30
$ perf script > out.perf
$ ./flamegraph.pl out.folded > flamegraph.svg

# 5. 分析火焰图发现热点函数
# 例如: HashMap.resize() 占用 80%
# 根因: HashMap 并发扩容导致死循环

案例 2:数据库 IO 延迟排查

# 1. 检查 IO 延迟
$ iostat -xdm 1 5
# sda: await=35ms, %util=95%  # HDD await > 20ms 异常

# 2. 找 IO 大户
$ iotop -oP
# PID 54321 (mysqld) READ 45MB/s

# 3. 检查 MySQL
$ mysql -e "SHOW PROCESSLIST"
# 发现大量全表扫描查询

# 4. 使用 biolatency 确认延迟分布
$ /usr/share/bcc/tools/biolatency 10
# 延迟分布: 50% 在 16-32ms, 10% 在 64-128ms

# 5. 解决: 添加索引, 优化查询

案例 3:内存泄漏排查

# 1. 监控 RSS 变化
$ while true; do
    cat /proc/12345/status | grep VmRSS
    sleep 60
  done
# VmRSS 持续增长, 每小时增加 100MB

# 2. 分析内存分布
$ cat /proc/12345/smaps_rollup
# Private_Dirty 持续增长 → 匿名内存泄漏

# 3. 使用 eBPF 追踪内存分配
$ /usr/share/bcc/tools/memleak -p 12345
# 显示泄漏调用栈

# 4. 对于 Java 应用
$ jmap -dump:format=b,file=/tmp/heap.hprof 12345
# 使用 MAT 分析堆转储

案例 4:网络延迟排查

# 1. 检查网络延迟
$ ping target
# RTT = 50ms(正常 < 1ms)

# 2. 检查 TCP 重传
$ nstat -az | grep -i retrans
# TcpRetransSegs 值很高

# 3. 抓包分析
$ tcpdump -i eth0 -nn host target -w capture.pcap -c 10000
$ tcpdump -r capture.pcap -nn | grep -c "retransmission"

# 4. 检查网卡错误
$ sar -n EDEV 1 5
# rxerr/s 或 txerr/s > 0

# 5. 检查连接队列
$ ss -lnt
# Recv-Q > 0 说明全连接队列积压

案例 5:综合性能分析

# 使用 dstat 同时监控多维度
$ dstat -tcdnym --top-cpu --top-mem --top-io --output perf.csv 1 300

# 分析 CSV 数据
$ python3 -c "
import csv
with open('perf.csv') as f:
    reader = csv.reader(f)
    for row in reader:
        if 'cpu' in str(row).lower():
            print(row)
"

# 使用 sar 采集历史数据用于事后分析
$ sar -u -f /var/log/sa/sa10 -s 14:00:00 -e 15:00:00
# 分析故障时段的 CPU 变化

工具选择决策树

性能问题排查

├── CPU 问题
   ├── 整体 CPU   top  vmstat
   ├── 找热点进程  top/htop  pidstat
   ├── 找热点函数  perf record  flamegraph
   └── CPU 不均  mpstat -P ALL  taskset

├── 内存问题
   ├── 内存不足  free  vmstat  /proc/meminfo
   ├── OOM  journalctl -k  /var/log/messages
   ├── 内存泄漏  pmap  smaps  memleak (bcc)
   └── swap 频繁  vmstat  sar -W

├── IO 问题
   ├── IO 延迟高  iostat -x  biolatency (bcc)
   ├──  IO 大户  iotop  pidstat -d
   ├── IO wait   top  vmstat
   └── 文件级 IO  filetop (bcc)  opensnoop (bcc)

├── 网络问题
   ├── 延迟高  ping  tcpdump
   ├── 吞吐低  iperf3  sar -n DEV
   ├── 连接数高  ss  sar -n SOCK
   └── 丢包  ifconfig  sar -n EDEV

└── 综合分析
    ├── 实时监控  dstat  atop
    ├── 历史趋势  sar
    └── 深度分析  perf  eBPF/bcc

总结

Linux 性能诊断工具体系庞大,但每个工具都有其适用场景。核心要点:

  1. top/htop 是入口工具:快速了解系统整体状况,定位异常进程。
  2. vmstat 是万能工具:一行命令同时看到 CPU、内存、IO 的概况。
  3. iostat 是 IO 诊断的核心-x 选项提供 await、%util 等关键指标。
  4. perf + flamegraph 是深度分析利器:从函数级别定位 CPU 热点。
  5. eBPF/bcc 是新一代工具:可以追踪内核和用户态的任何事件,延迟分析更精确。
  6. sar 是历史数据分析的唯一选择:生产环境必须开启 sysstat 数据采集。
  7. pidstat 是进程级分析的好帮手:CPU、内存、IO、上下文切换一网打尽。
  8. 工具选择遵循"从宽到窄"原则:先用 top/sar 看全局,再用 pidstat/iostat 定位进程/设备,最后用 perf/eBPF 分析根因。

性能诊断的黄金法则:先描述问题,再选择工具。明确现象(CPU 高?IO 慢?网络抖?)→ 确定方向(进程级?系统级?)→ 选择工具 → 采集数据 → 分析根因,而非上来就乱敲命令。