Skip to content

Linux 性能排查

5

Linux 服务器性能排查:free -m 与 vmstat 1 命令详解

本文讲解 Linux 运维中最常用的两个性能排查命令 free -mvmstat 1,主要用于 网站卡顿、接口慢、服务器负载高、内存溢出、IO 瓶颈 问题定位,内容通俗易懂,适合新手学习与生产环境实操。

一、free -m 查看服务器内存状态

1. 命令作用

free -m:查看服务器物理内存与交换分区使用情况,-m 表示以 MB 为单位展示,数据直观易读,是排查内存问题的基础命令。

2. 执行命令

free -m

3. 典型输出示例

              total        used        free      shared  buff/cache   available
Mem:           3789        1205         412          82        2171        2394
Swap:          4095           0        4095

4. 字段详细解释

Mem(物理内存)

  • total:服务器总物理内存大小

  • used:已被系统、程序、服务占用的内存

  • free:完全空闲的裸内存(数值小是正常现象

  • shared:多个进程共享的内存空间

  • buff/cache:缓冲区 + 文件缓存内存

    • Linux 会自动利用空闲内存缓存文件、磁盘读写数据,提升访问速度

    • 该部分内存可随时回收给应用程序使用,不属于占用内存

  • available(核心指标):系统真正可用内存

    • = 剩余free内存 + 可回收cache内存

    • 判断内存是否充足,只看 available!

Swap(交换分区,磁盘虚拟内存)

  • total:交换分区总大小

  • used:已使用的交换分区空间

  • free:空闲交换分区空间

5. 内存排查核心结论

  • 误区:不要以free 列数值大小判断内存是否不足

  • 正确判断:优先看 available 可用内存

  • 危险信号:Swap used 持续上涨、频繁变动 = 物理内存不足,会导致网站卡顿、程序响应慢

  • 正常现象:free 很小,但 available 充足、Swap 未使用,服务器内存状态健康


二、vmstat 1 实时监控系统负载

1. 命令作用

vmstat 1:全方位实时监控服务器 进程、内存、Swap、磁盘IO、系统中断、CPU占用 状态。1 代表 每秒刷新一次数据,是排查服务器综合性能瓶颈的核心命令。

2. 执行命令

vmstat 1
# 停止监控:按下 Ctrl + C

3. 典型输出示例

procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
 r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa st
 1  0      0   42100  35680 2218600    0    0     2    15  432 1256 12  3 83  2  0

4. 全字段分组详解

① procs 进程状态

  • r:等待运行的就绪进程数

    • r 持续大于 CPU 核心数:CPU 算力不足,请求排队,网站响应卡顿

  • b:阻塞睡眠进程(等待磁盘IO)

    • b 持续大于0:存在磁盘IO阻塞,有任务长期等待磁盘读写

② memory 内存状态(单位:KB)

  • swpd:已使用的 Swap 交换分区大小

  • free:空闲物理内存

  • buff:缓冲区内存

  • cache:文件缓存内存

③ swap 交换分区(内存瓶颈核心指标)

  • si:swap in,数据从磁盘交换区读入物理内存

  • so:swap out,数据从物理内存写入磁盘交换区

  • 预警:si、so 持续不为0 = 物理内存严重不足,服务器性能暴跌

④ io 磁盘读写状态

  • bi:磁盘每秒读取数据量

  • bo:磁盘每秒写入数据量

  • bi/bo 数值长期过高,说明磁盘频繁读写,大概率存在IO瓶颈(常见于数据库服务器)

⑤ system 系统内核状态

  • in:每秒系统中断次数

  • cs:每秒进程上下文切换次数

  • cs 数值异常巨大:线程频繁切换,消耗大量CPU资源,降低服务器效率

⑥ CPU 占用状态(总和≈100%)

  • us:用户态CPU(网站程序、Java/PHP/Go业务进程占用)

  • sy:内核态CPU(系统内核调度占用)

  • id:空闲CPU占比

  • wa(核心):IO等待CPU占比

    • wa 持续 > 10%:磁盘读写速度跟不上,大量进程等待IO,网站加载缓慢

  • st:虚拟机被宿主机抢占的CPU(云服务器基本为0)


三、万能排障口诀(快速定位问题)

  • us高、id低:CPU 算力不足,程序运算压力大

  • wa高、bi/bo高:磁盘 IO 瓶颈,数据库读写阻塞

  • si/so 不停跳动:内存不足,频繁读写虚拟内存

  • r 队列长期偏高:CPU 任务排队,并发承载能力不足

四、生产环境标准排查流程

  1. 先用 free -m 查看内存基线,确认可用内存、Swap占用情况

  2. 再用 vmstat 1 实时观察动态负载,定位瓶颈类型

  3. Swap 占用上涨 + si/so 不为0 → 内存瓶颈

  4. CPU空闲高 + wa 很高 → 磁盘/数据库IO瓶颈

  5. us 占用极高 + id 极低 → CPU算力瓶颈

五、拓展实用命令

# 人性化展示内存(自动适配单位)
free -h

# 仅监控5次后自动退出,无需手动停止
vmstat 1 5

六、常见新手误区

  • ❌ 误区:free 空闲内存小 = 内存不够用

  • ✅ 正确:Linux 缓存机制会最大化利用内存,以 available 和 Swap 状态为准

  • ❌ 误区:手动清理缓存提升性能

  • ✅ 建议:生产环境无需手动清缓存,缓存可大幅提升文件访问效率