在 CentOS 系统运维过程中,准确掌握内存使用状况是至关重要的技能,无论是排查性能瓶颈,还是规划服务器资源,对内存的清晰认知都能帮助我们做出明智决策,本文将详细介绍几种在 CentOS 系统中查看内存详细信息的实用方法,助您从不同维度全面了解系统内存。

基础检查:free 命令的深入解读
free 命令是快速获取内存概览的首选工具,但仅仅看那几个数字是不够的,理解其背后的含义才是关键。
直接输入 free,默认显示单位是 KB,为了便于阅读,我们通常加上 -h 参数,以人类易读的格式(G、M)输出:
free -h 输出结果通常如下:
total used free shared buff/cache available
Mem: 3.7G 1.1G 200M 10M 2.4G 2.3g
Swap: 2.0G 0B 2.0G 这里需要重点关注几个指标:
- total: 物理内存的总大小。
- used: 已使用的内存,这个值需要注意,它包含了被应用程序占用的内存和内核用于缓存(buffer/cache)的部分。
- free: 完全未被使用的内存。
- buff/cache: 这是内核用于磁盘缓存和缓冲区的大小,这部分内存在系统需要时可以被快速回收给应用程序使用,因此它不属于“浪费”的内存。
- available: 这是最值得关注的指标,它表示系统在不进行 Swap 的情况下,可以提供给新应用程序使用的内存估算值,它包含了
free内存和大部分可回收的buff/cache内存,在评估服务器是否内存充足时,应主要参考此值。 - Swap: 交换分区的使用情况。
used值持续很高,说明物理内存不足,系统频繁使用硬盘作为虚拟内存,这将严重拖慢性能。
为了更细致地观察内存变化,可以使用 -s 参数指定间隔秒数进行持续监控:
free -s 5 -h 这条命令会每 5 秒刷新一次内存信息。
探秘 /proc/meminfo:获取内存信息的源头
free、top 等命令的数据都来源于 /proc/meminfo 这个虚拟文件,直接查看这个文件,可以获得最为详尽的内存信息。
cat /proc/meminfo 非常丰富,包含了数十个内存相关指标,对于运维人员来说,以下几个条目尤为重要:
MemTotal: 总物理内存,与free中的 total 对应。MemFree: 完全空闲的内存。MemAvailable: 估算的可用内存,是核心参考指标。Buffers: 块设备缓存。Cached: 文件页缓存。SwapCached: 被缓存到交换区的内存大小。Active/Inactive: 活跃与非活跃内存,有助于判断内存压力。SwapTotal/SwapFree: 交换分区总量与剩余量。
通过 grep 可以快速过滤出关心的信息,

grep -E 'MemTotal|MemAvailable|SwapTotal' /proc/meminfo 这种方法能够提供最原始、最全面的数据,适合用于脚本自动化采集或深度分析。
动态监控:top 与 vmstat 的实时视角
对于运行中的系统,动态监控内存使用趋势同样重要。
top 命令提供了一个实时的、全屏的动态进程视图,在 top 界面中,首部几行就包含了内存和交换分区的汇总信息,其数据与 free -h 类似,按 q 即可退出。
另一个强大的工具是 vmstat(Virtual Memory Statistics),它不仅能报告内存,还能显示进程、块 IO、中断和 CPU 活动等信息。
vmstat -w 2 5 -w: 宽输出模式,更易读。2: 每 2 秒采集一次数据。5: 共采集 5 次后退出。
在 vmstat 的输出中,我们关注 memory 列的 swpd(已使用的交换分区大小)、free(空闲内存)、buff、cache,以及 swap 列的 si(每秒从磁盘换入的内存大小)和 so(每秒换出到磁盘的内存大小)。si 和 so 长期非零,则是内存不足的强烈信号。
专业工具:smem 的进阶分析
在某些场景下,我们可能需要了解进程的实际物理内存占用(PSS、USS),这比 top 中显示的 RES 常驻内存)更具参考价值。smem 工具正是为此而生。
您可能需要安装它:
yum install epel-release -y
yum install smem -y 使用 smem 查看进程内存:
smem -k -s pids -k: 显示单位为 MB/GB。-s pids: 按 PID 排序。
更常用的方式是查看每个用户的内存占用:

smem -u 或者以饼图形式输出汇总报告(需要图形界面或配合其他工具):
smem --pie name -s rss smem 的优势在于它能计算出 PSS(Proportional Set Size),即按比例计算共享内存后的物理内存占用,更能反映一个进程独自占用了多少物理内存。
排查内存泄漏与理解 Slab 占用
有时你会发现,free 命令显示 used 很高,但通过 top 又找不出是哪个进程占用的,这很可能是内核的 Slab 缓存占用了大量内存,Slab 是内核用于管理数据结构缓存的一种机制。
使用 slabtop 可以实时查看 Slab 缓存的使用情况:
slabtop 如果要查看当前系统的 Slab 总大小,可以:
cat /proc/meminfo | grep Slab 如果发现 dentry、inode_cache 等占用异常高,可能是文件系统缓存未能及时释放,在某些极端情况下可能暗示着某种形式的内核内存泄漏或特定应用(如大量小文件操作)导致。
掌握以上这套组合工具和方法,您就不再是仅仅“看一眼”内存,而是能够真正地“诊断”内存,从概览到细节,从静态到动态,这些命令共同构成了一名系统管理员分析 CentOS 内存状态的完整工具箱,在实际工作中,根据不同的场景灵活选用这些工具,将使服务器运维工作变得更加得心应手。

