在 60 秒内,判断问题是在 CPU、内存、IO、网络,还是进程本身。
不求定位到代码行,但要 快速缩小 80% 的排查范围。
uptime示例输出:
load average: 6.23, 5.89, 5.12怎么看?
load ≈ CPU 核数 → 正常
load ≫ CPU 核数 → 系统压力大
load 持续升高 → 慢性问题
⚠️ 误区Load 高 ≠ CPU 一定高可能是 IO 阻塞 / 内存抖动。
top关注三件事:
load average
CPU 使用率
是否有“显眼的异常进程”
此时 不要急着 kill,只是建立直觉。
dmesg | tail重点关注:
Out of memory
Killed process
磁盘 I/O error
文件系统只读(read-only)
如果这里已经在报错,性能问题往往只是“结果”。
mpstat -P ALL 1关键指标:
%usr:用户态
%sys:内核态
%iowait:等 IO
判断逻辑:
usr 高 → 业务计算密集
sys 高 → 系统调用 / 网络 / 锁
iowait 高 → IO 才是真凶
pidstat 1你要找的是:
持续占用 CPU 的 PID
用户态 or 内核态为主
这是从“系统视角”切换到“进程视角”的关键一步。
free -m重点:
available 才是可用内存
swap 是否被使用
Linux 会 主动用内存做缓存,这是好事。
vmstat 1关键字段:
si / so:Swap In / Out
r:运行队列
b:阻塞进程
⚠️如果 si/so 持续不为 0,性能一定会抖。
iostat -xz 1重点指标:
%util → 是否接近 100%
await → IO 延迟
r/s w/s → IO 模式
经验判断:
util 高 + await 高 → 磁盘瓶颈
util 不高但 await 高 → 后端存储慢(云盘常见)
sar -n DEV 1关注:
rx/tx 流量
dropped / errors
sar -n TCP,ETCP 1重点:
retrans(重传)
listen overflow
half-open 连接
网络慢,很多时候是 TCP 在自救。
现在你已经知道:
是 CPU / 内存 / IO / 网络
哪个指标异常
哪个进程最可疑
这时再看一次 top,你会发现:
你不再是“看热闹”,而是在“验证判断”。
✔ 不依赖监控✔ 适合 SSH 上线排障✔ 适合事故现场✔ 适合新人形成系统观
一句话心法:
先系统,后子系统;先现象,后原因;先缩小范围,再深入分析。
CPU 深入:perf top / perf record
IO 深入:blktrace
内存深入:slabtop
网络深入:ss / tcpdump
参考:Brendan Gregg「Linux Performance Analysis in 60 Seconds」
文章推荐