Linux 性能分析:60,000 毫秒速查

Linux 性能分析:60,000 毫秒速查

本文基于 Netflix Tech Blog 的经典文章整理,提供一份在 60 秒内快速判断 Linux 系统性能瓶颈的实操指引。

目标

60 秒 内,使用标准工具快速判断系统是否存在性能瓶颈,以及瓶颈大致在哪个资源(CPU、内存、磁盘、网络)上。适用于生产环境快速排障、容量评估及性能回归初步定位。


60 秒检查清单

按顺序执行以下命令,全面覆盖 CPU、内存、存储、网络四大资源的“使用、饱和、错误”信号。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
dmesg | tail          # 1. 内核/硬件错误
uptime                # 2. 负载概况
vmstat 1              # 3. 系统整体健康
mpstat -P ALL 1       # 4. 单核平衡性
pidstat 1             # 5. 进程级 CPU/IO
iostat -xz 1          # 6. 磁盘详细指标
free -m               # 7. 内存使用
sar -n DEV 1          # 8. 网络吞吐与错误
sar -n TCP,ETCP 1     # 9. TCP 连接状况
top                   # 10. 进程热点概览

注意:大部分命令后的 1 表示采样间隔为 1 秒,用于观察趋势而非瞬时值。


关键指标解读

1. dmesg | tail

  • 关注点:是否有 OOM Kill、I/O error、TCP dropping request、硬件故障报错。
  • 意义:如果这里有报错,通常直接指向根因。

2. uptime

  • 关注点load average(1分钟/5分钟/15分钟)。
  • 意义:体现系统整体负载趋势(运行中+等待运行+不可中断进程)。若数值持续超过 CPU 核数,需进一步排查。

3. vmstat 1

  • r (Run Queue):就绪队列长度。持续 > CPU 核数,说明 CPU 饱和。
  • si/so (Swap In/Out):非零且频繁波动,说明内存严重不足,系统在“抖动”。
  • wa (IO Wait):CPU 等待 IO 的比例。高值通常对应磁盘瓶颈。

4. mpstat -P ALL 1

  • 关注点:是否存在某一个 CPU 核 %usr%sys 持续 100%,而其他核空闲。
  • 意义:排查单线程应用热点或不合理的 IRQ 亲和性设置。

5. pidstat 1

  • %CPU:定位具体的 CPU 消耗进程。
  • kB_rd/s, kB_wr/s:定位具体的磁盘读写进程。
  • %wait:进程在等待 CPU 的时间占比。

6. iostat -xz 1

  • r/s, w/s, rkB/s, wkB/s:磁盘读写吞吐量。
  • await:平均 IO 请求等待时间(排队+服务)。> 10ms 通常需要关注(取决于硬件类型,SSD 应更低)。
  • avgqu-sz:平均请求队列长度。持续 > 1,说明设备饱和。
  • %util:设备利用率。接近 100% 说明磁盘满载。

7. free -m

  • available:实际可用内存。比 free 列更具参考价值。
  • buff/cache:系统缓存。占用高通常是好事(加速 IO),除非 available 同时也极低。

8. sar -n DEV 1

  • rxkB/s, txkB/s:网卡流量吞吐。检查是否达到网卡物理上限。
  • rxpck/s, txpck/s:包速率。小包高并发场景下(如 DNS、Redis),PPS 可能是瓶颈。
  • dropped/errors:丢包或错误计数。需零容忍,出现即异常。

9. sar -n TCP,ETCP 1

  • active/s, passive/s:主动/被动建连速率。
  • retrans/s:TCP 重传率。网络拥塞或丢包的直接信号。
  • estreset/s:连接重置速率。排查服务端崩溃或防火墙问题。

10. top

  • 综合视图:结合 %CPU%MEMTIME+ 找到资源消耗 Top 的进程。
  • 状态:关注 Z (僵尸进程) 或 D (不可中断睡眠) 状态的进程。

常见异常模式对照表

现象关键指标信号可能原因排查方向
CPU 饱和vmstat r > CPU核数
mpstat 无空闲
计算密集型任务
死循环
top/pidstat 找热点进程
perf 分析热点函数
内存不足vmstat si/so > 0
free available 低
内存泄漏
配置不当
pidstat -r
检查 JVM/Cache 配置
磁盘瓶颈iostat %util 100%
iostat await 高
随机 IO 过多
大文件读写
iotop/pidstat -d 找进程
优化 IO 模型
网络拥塞sar retrans/s 高
sar dropped > 0
带宽跑满
链路丢包
nicstat/tcpdump
检查交换机/防火墙
单核热点mpstat 单核 100%
其他核空闲
单线程应用
中断绑定不均
绑核优化
网卡软中断调优

进阶工具

如果 60 秒检查发现了疑点,可使用以下工具进行深挖:

  • perf:CPU 指令级热点分析,生成火焰图。
  • strace:跟踪进程系统调用,定位阻塞点。
  • tcpdump:网络抓包,分析协议细节与时序。
  • bpftrace / eBPF:新一代低开销观测技术,内核与用户态全栈追踪。

总结

Linux 性能分析不需要一开始就陷入复杂的细节。遵循USE 方法论(Utilization 使用率, Saturation 饱和度, Errors 错误),通过这 10 个基础命令,你可以在 1 分钟内建立对系统健康状况的全局认知,为后续的精准排查指明方向。

参考资料

0%