在Linux系统中,内存是影响系统性能的关键资源之一,准确掌握内存的使用情况对系统优化、故障排查至关重要,本文将详细介绍Linux下查询内存信息的多种命令及其使用方法,帮助用户全面了解内存状态。
使用free
命令快速查看内存概览
free
是Linux中最常用的内存查看工具,以易读的格式显示物理内存和交换分区的使用情况,其基本语法为free [选项]
,常用选项包括:
-h
:以人类可读格式显示(如KB、MB、GB);-m
:以MB为单位显示;-g
:以GB为单位显示;-s
:设置刷新间隔(单位为秒),例如free -s 3
每3秒刷新一次。
执行free -h
后,输出类似如下:
total used free shared buff/cache available
Mem: 7.7G 2.1G 1.2G 256M 4.4G 5.0G
Swap: 2.0G 0B 2.0G
各列含义如下:
- total:总物理内存;
- used:已使用内存(包含应用程序、缓存、缓冲区等);
- free:完全未使用的内存;
- shared:进程间共享内存(如tmpfs);
- buff/cache:缓存(Cache)和缓冲区(Buffers)的总和,用于加速文件读写;
- available:真正可用的内存(包含free+可回收的cache/buffer),是判断内存是否充足的重要指标,而非
free
列。
查看/proc/meminfo
获取详细内存信息
/proc/meminfo
是内核提供的内存详细信息文件,包含更底层的统计数据,执行cat /proc/meminfo
可查看所有字段,其中关键字段如下(表格整理):
字段名 | 含义 | 单位 |
---|---|---|
MemTotal | 总物理内存 | KB |
MemFree | 未使用内存 | KB |
Buffers | 块设备缓冲区(用于存储块设备I/O数据) | KB |
Cached | 页缓存(用于加速文件读取) | KB |
SwapTotal | 交换区分区总大小 | KB |
SwapFree | 交换区分区剩余大小 | KB |
Active | 活跃内存(正在使用的内存) | KB |
Inactive | 非活跃内存(可回收的内存) | KB |
Dirty | 脏页(已修改但未写入磁盘的内存) | KB |
Slab | 内核数据结构缓存 | KB |
通过grep "MemTotal|MemAvailable|SwapTotal" /proc/meminfo
可快速提取关键信息:
MemTotal: 7864316 kB
MemAvailable: 5160800 kB
SwapTotal: 2097148 kB
使用vmstat
命令监控内存动态变化
vmstat
(Virtual Memory Statistics)可实时监控虚拟内存、进程、CPU等状态,语法为vmstat [选项] [刷新间隔] [次数]
,重点关注内存相关列:
- buff:块设备缓冲区大小;
- cache:页缓存大小;
- si:从交换区调入内存的量(KB/s),若持续大于0,可能内存不足;
- so:调出到交换区的量(KB/s),同上。
执行vmstat 2 3
(每2秒刷新1次,共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 1234567 89012 3456789 0 0 10 20 100 150 5 2 92 1 0
通过top
/htop
实时监控进程内存占用
top
是动态进程管理工具,默认按CPU使用率排序,按M
键可切换为按内存占用排序,关键内存列包括:
- VIRT:虚拟内存大小(进程使用的总内存,包括代码、数据、共享库、交换区等);
- RES:常驻内存集(实际物理内存占用,不包括交换区);
- SHR:共享内存(如共享库、进程间通信内存);
- %MEM:物理内存占用百分比。
htop
是top
的增强版,支持鼠标操作、进程树展开等,界面更直观,安装后执行htop
,按F6
选择MEM%
即可按内存占用排序。
使用smem
精确分析进程内存
smem
可区分物理内存、虚拟内存、共享内存,计算进程的实际内存占用(如PSS,Proportional Set Size,按比例分摊的共享内存),安装后执行smem -P
(按进程显示),输出包含:
- Pss:进程实际占用的物理内存(包含共享内存分摊);
- Uss:进程独占的物理内存(不包含共享内存);
- Swap:进程使用的交换区大小。
smem -P | sort -nrk 4 | head -5
可查看内存占用最高的前5个进程。
NUMA架构服务器的内存查询
对于NUMA(Non-Uniform Memory Access)架构服务器,使用numastat
可查看每个NUMA节点的内存分布,执行numastat
,输出类似:
node0 node1
---------------------- ----------------------
total 3932160 3932160
free 1966080 1966080
used 1966080 1966080
结合numactl
可绑定进程到特定NUMA节点,优化内存访问效率。
Linux查询内存信息的工具各有侧重:free
适合快速概览,/proc/meminfo
提供底层细节,vmstat
监控动态变化,top
/htop
实时跟踪进程内存,smem
精确分析内存占用,numastat
针对NUMA架构,根据需求选择合适工具,结合available
、si
/so
等指标,可准确判断内存状态并进行优化。
相关问答FAQs
问题1:为什么free -h
显示的已用内存(used)很高,但系统运行仍然流畅?
解答:Linux内存管理中,已用内存包含两部分:应用程序实际占用的内存(Active)和可回收的缓存(Cached)与缓冲区(Buffers),Cached用于加速文件读取,Buffers用于块设备I/O,这些内存可在应用程序需要时被内核释放,判断内存是否充足应关注available
列(真正可用内存),而非used
列,只要available
不为0,系统就不会因内存不足卡顿。
问题2:如何查看系统中哪些进程占用了最多的物理内存?
解答:可通过以下命令实现:
- 使用
top
:执行top
,按M
键按内存占用(%MEM)排序,或按Shift+F
选择MEM%
列排序,即可查看进程内存占用。 - 使用
ps
命令:执行ps -eo pid,ppid,cmd,%mem,%cpu --sort=-%mem
,按内存占用百分比(%MEM)降序排列,显示进程ID、父进程ID、命令及内存占用。 - 使用
smem
:执行smem -P | sort -nrk 4
(按PSS列降序),可查看进程实际物理内存占用(包含共享内存分摊),更准确反映内存使用情况。
原创文章,发布者:酷番叔,转转请注明出处:https://cloud.kd.cn/ask/27110.html