当服务器出现“慢但不挂”的问题时,最怕只盯着一个指标。把 top、iostat、vmstat 串起来,可以快速判断瓶颈来自 CPU、磁盘还是内存。
1. 用 top 看 CPU 和进程画像
- 关注
load average与 CPU 核数的关系。 - 观察
us / sy / wa:wa高通常意味着 IO 等待。 - 按
Shift + P排序,定位高 CPU 进程。
2. 用 iostat 验证是否磁盘瓶颈
iostat -x 1 5
%util长期接近 100%,说明磁盘接近打满。await持续升高,说明请求排队明显。- 随机写较多时,优先检查日志刷盘与数据库慢查询。
3. 用 vmstat 判断内存与调度压力
vmstat 1 5
si/so非 0:存在 swap,性能一般会明显下降。r长期大于 CPU 核数:运行队列拥堵。b值较高:进程处于不可中断睡眠,常见于 IO 等待。
4. 实战建议
- 先止血:限流、降级、扩容一条先落地。
- 再优化:拆慢 SQL、减少同步日志、引入缓存。
- 最后固化:建立负载阈值告警与巡检脚本。