
你运行top,看到一堆数字在跳动。你知道CPU使用率,但%wa是什么意思?%si又是什么?load average三个数字分别代表什么?你运行free -h,看到available和free不一样,该看哪个?vmstat输出的si和so是什么?
性能监控命令的输出不是一堆无意义的数字。每个指标都在告诉你系统在干什么。
今天把几个常用监控命令的核心指标讲清楚,让你真正看懂它们。
先看一个数据
在排查性能问题时,很多人会看一眼top或free,看到CPU或内存使用率较高就认定是瓶颈,却忽略了真正的原因。其实,top中的%wa(I/O等待)高通常意味着磁盘是瓶颈,而%si(软中断)高可能暗示网络流量过大。
top:实时进程监控
top是最常用的性能命令。关键指标:
CPU状态行(在%Cpu(s)那一行):
| 指标 | 含义 | 正常范围 | 异常信号 |
|---|---|---|---|
%us | 用户态CPU | 取决于业务 | 持续>70%说明用户进程繁忙 |
%sy | 内核态CPU | <20% | 持续>30%可能系统调用频繁 |
%ni | 低优先级进程CPU | 通常很低 | 高说明有nice进程 |
%id | 空闲CPU | 越高越好 | 接近0说明CPU满载 |
%wa | I/O等待CPU | <5% | >10%说明磁盘或网络I/O是瓶颈 |
%hi | 硬件中断CPU | 通常很低 | 高说明硬件问题 |
%si | 软件中断CPU | 通常很低 | 高说明网络流量大 |
%st | 虚拟机偷取CPU | 虚拟机中应<5% | 高说明宿主机超售 |
进程列表:
PID:进程ID%CPU:CPU使用率%MEM:内存使用率TIME+:累计CPU时间(长时间高可能有问题)
交互快捷键: P按CPU排序、M按内存排序、1显示每个CPU核心。
vmstat:系统整体状态
vmstat显示系统整体状态,适合观察趋势。
bash
vmstat 2 5 # 每2秒输出一次,共5次
关键列:
procs(进程):
r:运行队列长度。持续大于CPU核心数,说明CPU不够。b:阻塞进程数。大于0表示有进程在等待I/O。
memory(内存):
swpd:已使用的swap。大于0说明物理内存不足。free:空闲内存。buff:缓冲区内存。cache:缓存内存(Linux会把空闲内存当缓存,不用太担心)。
swap:
si:从swap换入内存(KB/s)。持续大于0说明内存不够。so:从内存换出到swap(KB/s)。持续大于0说明内存不够。
io:
bi:从块设备读入(KB/s)。bo:写入块设备(KB/s)。高说明磁盘活跃。
system:
in:每秒中断数。cs:每秒上下文切换数。高说明进程切换频繁。
cpu:
us、sy、id、wa(同top)。
iostat:磁盘I/O监控
bash
iostat -x 1
关键列:
| 指标 | 含义 | 异常信号 |
|---|---|---|
%util | 磁盘忙碌百分比 | >80%说明磁盘饱和 |
await | 平均I/O等待时间(ms) | SSD应<5ms,机械盘<20ms |
r/s、w/s | 每秒读写次数(IOPS) | 高说明磁盘压力大 |
rkB/s、wkB/s | 每秒读写KB | 看是否达到磁盘带宽上限 |
avgqu-sz | 平均队列长度 | >1说明有积压 |
free:内存使用情况
bash
free -h
关键列解读(以输出为例):
text
total used free shared buff/cache available Mem: 7.6G 2.1G 1.2G 150M 4.3G 5.0G Swap: 2.0G 0B 2.0G
total:总内存used:已使用内存(不包括buff/cache)free:完全空闲的内存buff/cache:被用作缓冲区和缓存的内存(可以回收)available:真正可用的内存(看这个,不是看free)Swap used:swap使用量。大于0说明物理内存不够。
netstat/ss:网络连接监控
bash
ss -tunp
关键状态:
ESTAB:已建立的连接TIME_WAIT:关闭后的等待状态,大量出现可能影响端口资源SYN_SENT:正在尝试建立连接CLOSE_WAIT:对方关闭连接,本机未关闭(可能是代码bug)
bash
# 统计各状态连接数
ss -tunp | awk '{print $1}' | sort | uniq -c | sort -nr
实战场景
场景:网站变慢,怀疑CPU问题
先看top。如果%us高,是用户进程(如PHP/Java)吃CPU,优化代码或扩容。如果%sy高,是系统内核忙,可能是频繁的系统调用或网络流量大。如果%wa高,是I/O等待,磁盘慢,检查iostat。
场景:内存不足
看free -h的available。如果持续低于20%,考虑加内存或优化应用。看vmstat的si和so,如果持续大于0,内存不足已经影响到性能了。
场景:怀疑磁盘慢
看iostat -x 1的%util和await。如果%util持续>80%且await>10ms,磁盘是瓶颈,考虑换SSD或优化I/O。
真实案例
一台服务器响应变慢,top显示%us不高但%wa达到30%。iostat显示%util接近100%,await超过50ms。确认是磁盘I/O瓶颈。排查发现一个应用在频繁写日志,优化日志级别后,%wa降到5%,响应恢复正常。
最后一句
性能监控的关键是知道每个指标在告诉你什么。%wa高是磁盘慢,%si高是网络流量大,si/so持续>0是内存不够,%util高是磁盘饱和。指标本身不是问题,它们只是告诉你问题在哪里。你读懂了它们,它们就会告诉你该往哪个方向排查。




