Skip to content

Linux 性能排查

load average、top/vmstat/iostat、上下文切换、排查方法论。

Updated View as Markdown
For humans

Linux 性能排查

面试实战题:线上 CPU 高、负载高、变慢了,怎么查。主线:指标怎么看、工具怎么用、思路怎么走。

核心指标与工具

工具 看什么 关键字段
top / htop CPU、内存、进程 %CPU、RES、load average
vmstat 系统整体:CPU/内存/IO r(运行队列)、si/so(换页)、us/sy
iostat 磁盘 %util、await、IOPS
free 内存 available(别只看 free)
sar 历史数据 回溯故障
pidstat 单进程 线程级 CPU
perf / strace 热点/系统调用 定位到函数

load average 怎么读

  • load average(1/5/15 分钟)≈ 运行队列长度(运行 + 不可中断睡眠)
  • 判断标准:和核数比。4 核机器 load 4 表示刚好满载,8 表示严重过载
  • 不是越低越好,也不是 load 高就一定有问题:要看 CPU 还是 IO 导致的

排查方法论

load 高的排查分支: 先分类再定位

排查顺序:

  1. top 看全局:CPU 高不高、load 多少、哪个进程占
  2. vmstat 看分类:us(用户)/ sy(内核)/ wa(IO 等待)/ si-so(换页),先分类再定位
  3. 定位进程:top → pidstat -p <pid>(线程级)→ 确认是业务还是系统
  4. 深挖:perf 看函数热点、strace 看系统调用、jstack 看线程栈(Java)

常见问题速查

现象 方向
us 高 业务计算密集:代码热点、死循环、正则回溯
sy 高 上下文切换频繁:线程过多、锁竞争、中断风暴
wa 高 磁盘瓶颈:慢 SQL、日志刷盘、swap
si/so 高 内存不足换页:加内存、查泄漏
load 高但 CPU 低 不可中断睡眠(D 状态):磁盘 IO 阻塞
单核打满其他空闲 单线程热点:看代码串行点、GIL 场景(见 Python 篇)

面试追问

  1. load average 怎么判断? 和核数比:load/核数 ≈ 满载线。要看是 CPU 忙还是 IO 等
  2. 排查 CPU 高的步骤? top 找进程 → pidstat 看线程 → perf/线程栈定位热点。先分类(us/sy)再定位
  3. wa 高说明什么? 磁盘 IO 是瓶颈:查慢查询、日志、swap。CPU 在等 IO
  4. si/so 是什么? 内存换页:内存不足的硬信号。先查内存泄漏再考虑加内存
  5. load 高但 CPU 低? 进程在 D 状态(不可中断睡眠):等磁盘 IO。看 iostat 确认
Navigation

Type to search…

↑↓ navigate↵ selectEsc close