Linux 性能排查:CPU/内存/磁盘/网络一条龙

Linux 性能排查:CPU/内存/磁盘/网络一条龙

星苒鸭 Lv4

服务器“变慢”时,最容易犯的错就是:第一反应重启。重启确实能“治标”,但你会永远不知道根因是什么——下次还会慢。

这篇我把常见的性能排查流程整理成一条线:从“现象”到“指标”,再到“定位到进程/线程”,最后给出一份可以直接照着走的命令清单。

监控与指标:先把现象量化

一句话原则:先量化,再定位

你要回答的核心问题只有 3 个:

  • 慢在哪里:CPU?IO?网络?锁竞争?还是外部依赖?
  • 慢到什么程度:是否真的异常(对比历史/基线)?
  • 是谁在慢:哪一个进程、哪一类请求、哪条链路?

第 0 步:确认“慢”的表现(别凭感觉)

建议先记录三类信息(越快越好):

  • 时间窗:从什么时候开始慢?是否和发布/定时任务/流量波动有关?
  • 范围:全机慢还是某个服务慢?只慢写入还是读也慢?
  • 症状:接口超时、CPU 飙高、磁盘打满、连接数暴涨、负载飙高……

第 1 步:看整体健康(30 秒内必须得到判断)

1
2
3
4
5
6
7
8
9
# 1) 负载与运行时间
uptime

# 2) CPU/内存/进程整体概览
top

# 3) 磁盘容量与 inode(很多“慢”其实是写不进去)
df -h
df -i

负载(Load Average)怎么理解?

  • Load 不是 CPU 使用率,它更像“排队的人数”(可运行 + 不可中断 IO 等待)。
  • 经验判断:load > CPU 核心数 并不一定坏,但如果同时 iowait 高响应时间上升,就要警惕。

第 2 步:CPU 排查(算力不够 / 线程打架 / 上下文切换)

1
2
3
4
5
6
7
8
9
# 以“每秒刷新”观察趋势
top -d 1

# 查看每个 CPU 核的利用率(mpstat 属于 sysstat 套件)
mpstat -P ALL 1

# 看进程/线程级别(pidstat 也在 sysstat 里)
pidstat -u 1
pidstat -t -u -p <PID> 1

重点盯这些信号:

  • us 高:用户态计算重(编码/压缩/加密/序列化/大循环)
  • sy 高:系统调用重(大量网络/文件操作、频繁创建销毁对象)
  • wa 高:IO 等待(磁盘/网络存储慢)——这时 CPU 可能并不“忙”,但任务卡在等 IO
  • cs(上下文切换)异常:线程太多、锁竞争严重

小技巧:如果你看到 load 很高,但 CPU us/sy 不高、wa 很高,优先怀疑 IO。

第 3 步:内存排查(泄漏 / 缓存挤压 / 频繁换页)

1
2
3
4
5
6
7
8
# 内存概览(重点看 available,而不是 free)
free -h

# 观察 swap/换页/上下文切换等(1 秒刷新)
vmstat 1

# 找出 RSS 最大的进程
ps aux --sort=-rss | head

怎么看 free -h

  • available 才是关键:表示在不明显影响系统的情况下还能“借出来”的内存(含可回收的 page cache)。
  • swap 在增长 且系统变卡:十有八九是内存压力/泄漏/误配。

怎么看 vmstat

  • si/so(swap in/out)持续非 0:说明在换页,性能通常会明显下降。
  • r(run queue)高:说明 CPU 竞争激烈或任务积压。

第 4 步:磁盘/IO 排查(最常见的“暗杀者”)

1
2
3
4
5
# iostat 观察磁盘队列与延迟
iostat -xz 1

# 找出谁在疯狂读写(需要 root)
iotop

iostat -xz 里最值得看:

  • %util:接近 100% 说明设备接近饱和(不等于一定慢,但通常要警惕)
  • await:请求平均等待时间(延迟)
  • r/s、w/s、rkB/s、wkB/s:吞吐与 IOPS 方向

常见坑:

  • 磁盘没满,但 inode 满了df -i 一眼看出
  • 日志疯狂写:尤其是 debug 级别、每请求一条
  • 容器 overlayfs:小文件写入会更吃亏,注意 volume 策略

第 5 步:网络排查(连接数、丢包、拥塞、DNS)

1
2
3
4
5
6
7
8
# TCP/UDP 连接概览
ss -s

# 看监听端口与进程
ss -tulpn

# 看连接状态(比如 TIME_WAIT 爆炸)
ss -ant | head

如果你怀疑是外部依赖(数据库/缓存/第三方 API)导致:

  • 先确认超时重试策略是否合理
  • 看连接池是否耗尽(大量等待连接)
  • 看 DNS 是否抖动(偶发慢就是典型)

快速清单:你可以按这个顺序走

  • 1 分钟uptimetopdf -hdf -i
  • 3 分钟vmstat 1iostat -xz 1ss -s
  • 5 分钟pidstat -u 1 / pidstat -t -p PID 1 定位到进程/线程
  • 10 分钟:结合业务日志/链路追踪,回到“哪类请求慢”

总结

性能排查不是玄学,核心是:把“慢”拆到 CPU/内存/IO/网络四象限里,再下钻到进程/线程。你越早建立“基线”(正常时的指标范围),排障越快。

封面与配图来自 Unsplash(免费使用授权)。

  • 标题: Linux 性能排查:CPU/内存/磁盘/网络一条龙
  • 作者: 星苒鸭
  • 创建于 : 2026-02-06 08:00:00
  • 更新于 : 2026-03-05 19:20:55
  • 链接: https://xingranya.cn/linux-performance-troubleshooting/
  • 版权声明: 本文章采用 CC BY-NC-SA 4.0 进行许可。
评论