当前位置:首页>Linux>Linux 故障排查工具箱:top/htop/iostat/vmstat/netstat 详解

Linux 故障排查工具箱:top/htop/iostat/vmstat/netstat 详解

  • 2026-09-02 19:36:18
Linux 故障排查工具箱:top/htop/iostat/vmstat/netstat 详解

「零壹运维 · 零到壹,永不宕」

服务器卡住了、CPU 暴涨、磁盘 IO 异常、网络不通……遇到这些问题,你第一时间会怎么排查?

本文系统梳理 Linux 最常用的 5 大故障排查工具:top、htop、iostat、vmstat、netstat,每个工具的核心参数和实战用法一网打尽,帮你建立一套标准的排查思路。


一、工具速查表

工具
核心用途
关键参数
top
实时查看 CPU/内存/进程状态
P
 按 CPU 排序、M 按内存排序、k 杀进程
htop
top 的增强版,交互更好
F6
 排序、F9 杀进程、F10 退出
iostat
磁盘 IO 使用情况
-x
 显示详细、-d 1 每秒刷新
vmstat
系统整体资源统计(CPU/内存/swap/IO)
1 5
 每秒采样、采样 5 次
netstat
网络连接状态监听
-tulpn
 查看监听端口、-an 所有连接

二、top / htop:进程和 CPU/内存排查

2.1 top 常用操作

top

核心指标解读:

行/列
含义
load average
系统负载(1分钟/5分钟/15分钟),超过核心数说明压力山大
%Cpu(s): us
用户进程占用 CPU
%Cpu(s): sy
系统内核占用 CPU(过高可能是频繁上下文切换)
%Cpu(s): id
空闲 CPU,过低说明资源紧张
MiB Mem / %Mem
物理内存使用情况
RES
进程实际占用的物理内存
%CPU
单个进程的 CPU 占用率
COMMAND
进程命令名

快捷键:

按键
功能
P
按 CPU 使用率排序
M
按内存使用量排序
T
按累计 CPU 时间排序
k
杀死进程(输入 PID)
q
退出
1
显示每个 CPU 核心的使用率

2.2 htop:top 的增强版

htop

相比 top 的优势:

  • 彩色显示,更直观
  • 鼠标可交互选择进程
  • 可纵向滚动查看所有进程
  • 支持多标签页

快捷键:

按键
功能
F6
选择排序字段
F9
杀进程
F10
退出
/
搜索进程

2.3 实战场景

场景 1:CPU 飙高

top  # 找到 CPU 占用最高的进程
  • 如果是用户进程(us 高):检查业务代码是否有死循环、计算密集操作
  • 如果是系统进程(sy 高):可能是频繁系统调用、上下文切换,用 vmstat 进一步看 cs(上下文切换次数)

场景 2:内存不足

top  # 按 M 按内存排序
  • 关注 RES(实际物理内存占用)
  • 如果 available 接近 0,考虑释放缓存或增加内存

三、iostat:磁盘 IO 排查

3.1 基础用法

# 显示所有磁盘每秒 IO 状态,每 1 秒刷新

「零壹运维 · 零到壹,永不宕」

iostat -d -x 1

核心指标解读:

列
含义
%util
IO 使用率,接近 100% 说明磁盘是瓶颈
await
平均 IO 响应时间(毫秒),SSD 应在 10ms 以内,HDD 在 20ms 以内
svctm
平均服务时间(通常与 await 接近)
r/s
每秒读次数
w/s
每秒写次数
rkB/s
每秒读数据量(KB)
wkB/s
每秒写数据量(KB)

3.2 实战场景

场景:磁盘 IO 成为瓶颈

iostat -d -x 1
  • 如果 %util 持续 > 80%,且 await 很高(> 50ms),说明磁盘 IO 是瓶颈
  • 结合 top 确认是哪个进程在大量读写(top 按 d 输入设备名可以显示该设备的 IO)

四、vmstat:系统整体资源统计

4.1 基础用法

# 每秒采样一次,采样 5 次

「零壹运维 · 零到壹,永不宕」

vmstat 1 5

核心指标解读:

列
含义
r
等待运行的进程数(超过 CPU 核心数说明 CPU 紧张)
b
不可中断睡眠的进程数(通常在等待 IO)
swpd
交换分区使用量(不为零说明内存不足)
si
每秒从 swap 读取的数据量
so
每秒写入 swap 的数据量
bi
每秒从块设备读取的块数
bo
每秒写入块设备的块数
in
每秒中断次数
cs
每秒上下文切换次数(过高可能是频繁创建/销毁线程或锁竞争)
us/sy/id/wa
用户/系统/空闲/等待 IO 的 CPU 占用

4.2 实战场景

场景 1:频繁 swap

vmstat 1 5
  • 如果 swpd 不为 0,且 si/so 有数值,说明内存不足,系统在频繁使用 swap
  • 解决:增加内存或优化应用内存使用

场景 2:上下文切换过高

vmstat 1 5
  • 如果 cs 持续很高(如 > 10000),可能原因:
    • 大量线程频繁创建/销毁
    • 锁竞争严重
    • 进程间通信频繁

五、netstat:网络排查

注意:现代 Linux 推荐使用 ss 替代 netstat,但 netstat 仍然广泛使用。

5.1 基础用法

# 查看所有监听的 TCP 端口

「零壹运维 · 零到壹,永不宕」

netstat -tlnp

# 查看所有网络连接

「零壹运维 · 零到壹,永不宕」

netstat -an

# 查看指定端口是否被占用

「零壹运维 · 零到壹,永不宕」

netstat -tlnp | grep 8080

参数含义:

参数
含义
-t
TCP 连接
-u
UDP 连接
-l
监听状态
-n
以数字形式显示端口和服务
-p
显示进程信息

5.2 输出解读

Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      1234/sshd
tcp        0      0 192.168.1.100:54321    10.0.0.1:443            ESTABLISHED 5678/curl
列
含义
Recv-Q
接收队列中未读取的数据(持续积压说明接收慢)
Send-Q
发送队列中未确认的数据(持续积压说明发送慢)
Local Address
本地 IP:端口
Foreign Address
对端 IP:端口
State
连接状态:LISTEN(监听)、ESTABLISHED(已建立)、TIME_WAIT(等待关闭)

5.3 实战场景

场景 1:检查端口是否被占用

netstat -tlnp | grep 8080

如果有输出,说明端口已被占用,PID/Program name 列显示占用进程。


场景 2:TIME_WAIT 连接过多

netstat -an | grep TIME_WAIT | wc -l
  • TIME_WAIT 是 TCP 正常关闭后的状态,大量堆积可能原因:
    • 短连接过于频繁
    • 服务器端主动关闭连接
  • 解决:开启 SO_REUSEADDR、调整 net.ipv4.tcp_tw_reuse 和 net.ipv4.tcp_tw_recycle 参数

六、完整排查思路

遇到服务器异常,按以下顺序排查:

1. 先看整体负载
   ├── top / htop  → CPU、内存、负载是否异常
   └── vmstat 1 5  → 系统整体资源趋势

2. 定位瓶颈
   ├── CPU 高? → top 按 P 排序找进程
   ├── 内存高? → top 按 M 排序、检查 swap
   ├── 磁盘 IO 高? → iostat -d -x 1
   └── 网络? → netstat 检查连接、流量

3. 深入分析
   ├── 查看进程日志
   ├── 检查业务代码逻辑
   └── 结合系统日志(/var/log/messages、dmesg)

七、最佳实践

实践
说明
用 htop 替代 top
交互体验更好,支持鼠标操作
vmstat 1 5
 作为基准
连续采样 5 次避免瞬间峰值干扰
iostat -x
 看 %util
超过 80% 就要警惕磁盘瓶颈
netstat -tlnp
 排查端口占用
最常用的命令
定期保存 top/iostat 输出
异常时对比历史数据快速定位

八、总结

Linux 故障排查的核心是从整体到局部,从现象到根因:

  1. 先用 top/htop 看整体资源状况
  2. 用 vmstat 看系统整体趋势
  3. 用 iostat 确认是否是磁盘瓶颈
  4. 用 netstat 排查网络问题
  5. 最后定位到具体进程,查看日志和代码

这五个工具是每个运维工程师的必备技能,熟练掌握后,服务器出问题时你就能快速定位、从容应对。


下一篇文章我们聊聊 Shell 脚本实战:日常运维必备脚本大全,敬请期待!

最新文章

随机文章