在Linux和Unix-like系统中,查看服务器内存使用情况是日常运维的重要工作,掌握相关命令可以帮助管理员快速了解内存状态、排查性能问题,以下是常用的内存查看命令及其详细用法,包括命令参数、输出解读和实际应用场景。

free
命令是最基础的内存查看工具,它以人类可读的方式显示系统总内存、已用内存、空闲内存、缓冲区和缓存等信息,使用free -h
(human-readable)参数可以自动以合适的单位(如KB、MB、GB)显示数据,
total used free shared buff/cache available
Mem: 7.7G 2.1G 4.2G 256M 1.4G 5.3G
Swap: 2.0G 0B 2.0G
total
是总物理内存,used
是已使用内存(包括应用和缓存),free
是真正空闲内存,buff/cache
是内核缓冲区和缓存(可被回收),available
是应用程序可用的内存(比free
更准确),通过free -s 1
(每秒刷新一次)可以实时监控内存变化。
top
命令提供了动态的内存使用视图,默认按CPU使用率排序,但按下M
键可按内存使用率排序,其内存相关字段包括:
VIRT
(虚拟内存总量):进程使用的虚拟内存大小,包括未加载到物理内存的部分。RES
(常驻集大小):进程当前占用的物理内存。%MEM
:进程内存使用率占总内存的百分比。 持续观察top
的Mem:
行,可以快速定位内存占用异常的进程。
对于更详细的内存分布信息,vmstat
(virtual memory statistics)命令非常有用,执行vmstat -s
可显示内存统计摘要,包括总内存、空闲内存、缓冲区、缓存等具体数值;vmstat -m
则显示内存 slab 分配器的使用情况,有助于分析内核内存碎片。vmstat 1
每秒输出一次,重点关注si
(swap in)和so
(swap out)值,若持续大于0,说明系统正在频繁使用交换分区,可能存在内存不足。

cat /proc/meminfo
是直接读取内核内存信息的命令,输出内容比free
更全面,包括MemTotal、MemFree、Buffers、Cached、Slab等信息,通过grep "MemAvailable" /proc/meminfo
可精确获取可用内存值,该命令适合脚本自动化处理,因为输出格式固定。
在排查内存泄漏问题时,smem
工具(需安装)能更精确地计算进程的实际内存占用(如PSS、USS),区分共享内存的归属。smem -t
以表格形式显示进程内存占比,帮助定位真正消耗内存的进程。
以下是常用命令的参数对比表格:
命令 | 常用参数 | 主要用途 | 输出特点 |
---|---|---|---|
free |
-h , -s <秒数> |
快速查看总内存、已用、可用内存 | 简洁直观,适合日常监控 |
top |
-M (按内存排序) |
动态监控进程内存使用率 | 实时交互式,可排序 |
vmstat |
-s , -m , <秒数> |
分析内存分配、交换分区使用情况 | 统计数据详细,适合性能分析 |
/proc/meminfo |
无(配合grep使用) | 获取内核原始内存信息 | 数据全面,适合脚本处理 |
smem |
-t , -p <进程名> |
精确计算进程实际内存占用(含共享内存) | 区分共享内存,适合问题排查 |
相关问答FAQs
Q1: 为什么free
命令显示的used
内存很高,但系统运行仍然流畅?
A: 这是因为used
内存包含了内核缓冲区(Buffers)和页面缓存(Cache),这些数据可被应用程序快速回收使用。available
列才代表真正可供新进程使用的内存,若available
值充足,即使used
高,系统也不会卡顿;反之若available
接近0,才说明内存紧张。
Q2: 如何判断服务器内存是否不足?
A: 可通过以下指标综合判断:
free
命令中available
内存持续低于总内存的10%;vmstat
显示si
(swap in)和so
(swap out)长期不为0,说明频繁使用交换分区;top
或htop
中存在内存占用持续增长且不释放的进程;- 系统出现OOM(Out of Memory)错误,或进程被系统强制终止(如killed process),此时需结合
ps
或smem
分析具体进程,必要时考虑增加内存或优化应用。