首页 / Linux运维 / Linux性能监控

Linux性能监控完全指南:top/vmstat/iostat/netstat实战

线上服务器突然变慢,CPU飙高、内存吃紧、磁盘IO打满、网络异常——这些都是运维人日常面对的"经典场景"。掌握Linux性能监控四大神器:top、vmstat、iostat、netstat,能帮你快速定位问题根因。本文从实战角度,逐一拆解这四个工具的核心用法。

一、top:实时进程与系统资源监控

top是Linux下最常用的实时监控工具,它以交互式界面展示系统整体负载和各进程资源占用情况。

1.1 核心输出解读

top - 14:23:01 up 30 days,  3:21,  2 users,  load average: 0.52, 0.38, 0.31
Tasks: 128 total,   1 running, 127 sleeping,   0 stopped,   0 zombie
%Cpu(s): 12.5 us,  3.2 sy,  0.0 ni, 83.1 id,  1.2 wa,  0.0 hi,  0.0 si,  0.0 st
MiB Mem :  7852.0 total,  2341.2 free,  3829.5 used,  1681.3 buff/cache
MiB Swap:  2048.0 total,  2048.0 free,     0.0 used.  3215.4 avail Mem

关键指标解读:

1.2 常用交互快捷键

快捷键功能
P按CPU使用率排序
M按内存使用率排序
1展开/折叠多核CPU视图
c显示完整命令行
k输入PID终止进程
q退出

1.3 实战:找出占用CPU最高的进程

# 批处理模式输出,取前10个进程
top -b -n 1 | head -20

# 只看某个用户的进程
top -u nginx

# 指定刷新间隔为2秒
top -d 2

实战技巧:遇到CPU飙高,先按P排序找到占CPU最高的进程PID,再用 strace -p PID 查看系统调用,或用 perf top -p PID 分析热点函数。

二、vmstat:虚拟内存与系统状态统计

vmstat以简洁的表格形式展示CPU、内存、IO和系统的综合状态,特别适合做趋势分析。

2.1 基本用法

$ vmstat 1 5  # 每秒采样1次,共5次
procs -----------memory---------- ---cpu-- ---io---
 r  b   swpd   free   buff  cache  si  so  bi  bo  us sy id wa st
 2  0      0 2341200 1681300 3829500   0   0  12  18  12  3 83  1  0
 1  0      0 2341100 1681300 3829600   0   0   0   0  15  4 80  1  0
 3  0      0 2340900 1681300 3829700   0   0   0  24  25  6 68  1  0

2.2 核心列解读

列名含义异常判断
r运行队列中的进程数持续大于CPU核心数,CPU饱和
b阻塞在IO上的进程数持续大于0,磁盘IO瓶颈
swpd已使用的swap大小持续增长说明内存不足
si/soswap换入/换出速率非零说明内存压力严重
bi/bo每秒读/写块数结合wa判断IO方向
us/sy用户/内核态CPUus高=应用问题,sy高=系统问题
waIO等待CPU占比>5%需关注磁盘性能
id空闲CPU<20%需要扩容

2.3 实战场景:内存泄漏排查

# 持续监控swap和内存变化
vmstat 1 60 | awk '{print strftime("%H:%M:%S"), $3, $4, $5, $6}'

# 如果swpd持续增长且si/so非零,说明物理内存不足
# 结合以下命令定位内存占用最高的进程
ps aux --sort=-%mem | head -10

排查思路:r高+b高 → CPU和IO双重瓶颈;si/so持续非零 → 内存不足正在使用swap;wa高+bi/bo高 → 磁盘IO瓶颈。

三、iostat:磁盘IO性能统计

iostat是分析磁盘IO性能的利器,能精确到每块磁盘的读写吞吐和延迟。

3.1 安装与基本用法

# 安装
yum install -y sysstat    # CentOS/RHEL
apt install -y sysstat     # Ubuntu/Debian

# 基本用法:每秒采样,显示扩展统计
iostat -x 1

# 只看磁盘,不看CPU
iostat -d -x 1 3

3.2 扩展统计输出

Device:  rrqm/s  wrqm/s  r/s  w/s  rkB/s  wkB/s avgrq-sz avgqu-sz  await  svctm  %util
sda        0.02    1.50  0.15 2.80   3.2  17.2    13.8     0.03    2.1   0.8   0.24
sdb        0.00    0.20  0.05 0.30   0.8   1.2     5.6     0.01    1.5   0.5   0.18

3.3 关键指标判断标准

指标含义健康范围告警阈值
%util磁盘利用率<60%>80%持续则瓶颈
awaitIO平均等待时间(ms)<10ms>20ms需关注
svctm平均服务时间(ms)<5ms>10ms硬件问题
r/s + w/s每秒IO次数(IOPS)看磁盘规格SSD>10K, HDD>200
avgqu-sz平均队列长度<2>3需关注

3.4 实战:定位磁盘IO瓶颈

# 查看哪块磁盘负载高
iostat -x 1 5

# 结合pidstat找出哪个进程在疯狂读写磁盘
pidstat -d 1

# 查看磁盘队列深度
iostat -x 1 | grep -E "Device|sda"

# 如果%util高且await高:
# 1. 检查是否有大量随机IO(数据库、日志)
# 2. 考虑升级到SSD或NVMe
# 3. 调整IO调度器:echo noop > /sys/block/sda/queue/scheduler

关键判断:%util高但await低 → 磁盘满载但响应快,可接受;%util高且await也高 → 磁盘确实存在性能瓶颈,需要优化或升级。

四、netstat/ss:网络连接与端口监控

netstat用于查看网络连接、路由表、接口统计等。在现代Linux中,推荐使用更快的ss命令。

4.1 常用netstat命令

# 查看所有TCP监听端口
netstat -tlnp

# 查看所有TCP连接及状态
netstat -ant

# 统计各状态的TCP连接数
netstat -ant | awk '{print $6}' | sort | uniq -c | sort -rn

# 查看某个端口的连接情况
netstat -an | grep :80 | wc -l

4.2 ss命令(推荐替代)

# 查看所有TCP监听端口(比netstat快10倍以上)
ss -tlnp

# 查看所有TCP连接
ss -ant

# 统计各状态连接数
ss -ant | awk '{print $1}' | sort | uniq -c | sort -rn

# 查看某个端口的连接数
ss -ant | grep :80 | wc -l

# 查看socket统计摘要
ss -s

4.3 TCP连接状态分析

状态含义异常判断
LISTEN等待连接正常
ESTABLISHED已建立连接数量异常多需排查
TIME_WAIT连接关闭等待过多需调整内核参数
CLOSE_WAIT被动关闭等待过多说明应用未正确关闭连接
SYN_RECV收到SYN等待ACK过多可能是SYN Flood攻击

4.4 实战:排查TIME_WAIT过多

# 查看TIME_WAIT数量
ss -ant | grep TIME-WAIT | wc -l

# 如果TIME_WAIT超过数千个,调整内核参数:
cat >> /etc/sysctl.conf << 'EOF'
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_fin_timeout = 30
net.ipv4.tcp_keepalive_time = 600
net.ipv4.tcp_max_tw_buckets = 5000
EOF
sysctl -p

CLOSE_WAIT过多排查:这通常是应用代码bug——服务端发送FIN后,应用没有调用close()。需要检查应用的连接池配置和超时处理逻辑。使用 lsof -i:端口 定位是哪个进程。

五、综合实战:服务器变慢排查流程

当服务器响应变慢,按以下流程快速定位:

第一步:看整体负载

# 一眼看全局
uptime
# load average: 5.2, 4.8, 3.1 (8核机器,已超载)

第二步:CPU分析

# 看CPU分布
top -b -n 1 | head -5
# 重点看 us/sy/wa/id
# us高 → 找进程:top -b -n 1 | sort -k9 -rn | head
# wa高 → 转到磁盘IO分析

第三步:内存分析

# 看内存和swap
free -h
vmstat 1 5
# swap使用 → 内存不足,找进程:ps aux --sort=-%mem | head

第四步:磁盘IO分析

# 看磁盘负载和延迟
iostat -x 1 3
# %util高+await高 → 磁盘瓶颈
# 找进程:pidstat -d 1

第五步:网络分析

# 看连接数和网络状态
ss -s
ss -ant | awk '{print $1}' | sort | uniq -c | sort -rn
# TIME_WAIT/CLOSE_WAIT异常 → 调内核参数或排查应用

六、总结:监控速查表

问题现象首选工具关键指标排查方向
CPU飙高topus/sy找进程→strace/perf
系统变慢vmstatr/b/war高=CPU,b高=IO
磁盘慢iostat -x%util/await升级SSD/优化IO
连接异常ss -antTIME_WAIT等调内核参数/查应用
内存不足free/vmstatswap si/so加内存/查泄漏进程

掌握这四大工具,结合系统化的排查思路,90%以上的Linux性能问题都能快速定位。建议在服务器正常时多做基线记录,出问题时才能快速对比发现异常。


相关推荐: