Linux系统性能监控:常用命令与指标解读

Linux系统性能监控:常用命令与指标解读

你运行top,看到一堆数字在跳动。你知道CPU使用率,但%wa是什么意思?%si又是什么?load average三个数字分别代表什么?你运行free -h,看到availablefree不一样,该看哪个?vmstat输出的siso是什么?

性能监控命令的输出不是一堆无意义的数字。每个指标都在告诉你系统在干什么。

今天把几个常用监控命令的核心指标讲清楚,让你真正看懂它们。

先看一个数据

在排查性能问题时,很多人会看一眼topfree,看到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满载
%waI/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:

  • ussyidwa(同top)。

iostat:磁盘I/O监控

bash

iostat -x 1

关键列:

指标含义异常信号
%util磁盘忙碌百分比>80%说明磁盘饱和
await平均I/O等待时间(ms)SSD应<5ms,机械盘<20ms
r/sw/s每秒读写次数(IOPS)高说明磁盘压力大
rkB/swkB/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 -havailable。如果持续低于20%,考虑加内存或优化应用。看vmstatsiso,如果持续大于0,内存不足已经影响到性能了。

场景:怀疑磁盘慢

iostat -x 1%utilawait。如果%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高是磁盘饱和。指标本身不是问题,它们只是告诉你问题在哪里。你读懂了它们,它们就会告诉你该往哪个方向排查。

知识库

Linux系统中僵尸进程是怎么产生的?如何清理?

2026-6-30 17:05:01

知识库

iptables防火墙入门:规则管理与实战示例

2026-7-1 18:18:54

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧