Linux查看内存使用情况,free和vmstat命令详解
时间:2026-10-5 07:36 作者:emer 分类: 无
前言
服务器卡了,第一反应就是看看内存够不够用。很多人一看到 free 很少就慌了,觉得内存不够要扩容。其实 Linux 的内存管理和 Windows 不一样,free 少不代表内存真的不够。本文就讲一下怎么用 free 和 vmstat 两个命令正确查看内存使用情况。
free 命令
基本用法
直接输入:
free
输出示例:
total used free shared buff/cache available
Mem: 8165036 4000000 2000000 50000 2165036 4000000
Swap: 2097148 0 2097148
输出详解
| 列 | 含义 |
|---|---|
total |
总内存大小 |
used |
已使用的内存 |
free |
完全空闲的内存 |
shared |
共享内存 |
buff/cache |
缓存和缓冲区占用的内存 |
available |
真正可用的内存(重点看这列) |
重点:available 才是真正可用的内存
很多人只看 free 列,看到只剩几百M就慌了。其实 Linux 会把空闲内存都用来做缓存(buff/cache),这些缓存是可以随时回收的。
看 available 列才是真正可用的内存。 比如上面的例子,free 只有2G,但 available 有4G,说明还有4G内存可以用。
free 常用参数
free -h
以人类可读的格式显示(自动用G/M/K单位):
total used free shared buff/cache available
Mem: 7.8Gi 3.8Gi 1.9Gi 50Mi 2.1Gi 3.8Gi
Swap: 2.0Gi 0B 2.0Gi
free -m
以MB为单位显示。
free -g
以GB为单位显示。
free -s 5
每5秒刷新一次。
free -c 3
总共显示3次后退出。
vmstat 命令
基本用法
直接输入:
vmstat
输出示例:
procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
r b swpd free buff cache si so bi bo in cs us sy id wa st
2 0 0 2000000 50000 2100000 0 0 10 20 100 50 5 2 92 1 0
输出详解
procs 进程部分:
r:等待运行的进程数b:处于不可中断睡眠的进程数
memory 内存部分:
swpd:已用的交换分区大小free:空闲内存buff:缓冲区大小cache:缓存大小
swap 交换分区部分:
si:从磁盘交换到内存的速度(KB/s)so:从内存交换到磁盘的速度(KB/s)
io 磁盘I/O部分:
bi:从磁盘读取的速度(块/s)bo:写入磁盘的速度(块/s)
cpu CPU部分:
us:用户态CPU占用sy:内核态CPU占用id:空闲CPUwa:等待I/O的CPUst:被虚拟机偷走的CPU
vmstat 常用参数
vmstat 1
每秒刷新一次,按 Ctrl+C 退出。
vmstat 1 5
每秒刷新一次,总共刷新5次。
vmstat -s
显示内存统计信息。
怎么判断内存够不够用
看 available 够不够
free -h
看 available 列,如果 available 还有几百M以上,说明内存够用。
看 swap 用了多少
free -h
如果 Swap 的 used 列有数值,说明物理内存不够用了,系统在把内存数据换到磁盘上。这时候性能会大幅下降。
看 si 和 so
vmstat 1
如果 si 和 so 列长期不为0,说明系统在频繁换页,内存不够用了。
实际排查案例
案例1:内存够不够
free -h
看 available 列,如果还有几个G,说明内存够用。
案例2:系统变慢,怀疑内存不足
vmstat 1
看 si 和 so 是不是很高,如果很高说明在频繁换页,内存不够。
案例3:哪个进程占内存最多
top
按 M 键按内存排序,看哪个进程占的内存最多。
常见坑
坑1:把 free 少当成内存不足
Linux 的内存管理机制和 Windows 不一样,空闲内存都用来做缓存了,buff/cache 那部分是可以随时回收的。看 available 列才是真正可用的内存。
坑2:看到 swap 用了就慌
如果 swap 用了一点,但 si 和 so 都是0,说明那是历史遗留的,不影响性能。只有当 si 和 so 长期不为0的时候才是问题。
坑3:内存不够就随便扩容
内存不够的原因可能有很多:
- 某个程序内存泄漏
- 数据库缓存配置太大
- 日志缓存没配置
先找出原因,再决定要不要扩容。
总结
查看内存使用情况的核心命令:
- free -h:快速看内存总览,重点看
available列 - vmstat 1:实时监控内存和换页情况,看
si和so - top 按M:看哪个进程占内存最多
记住一个原则:Linux 的 free 少不是问题,available 少才是问题。
遇到问题加QQ23979811 协助处理