在Linux系统中,内存是系统运行的核心资源之一,及时掌握内存使用情况对于排查系统性能问题、优化资源分配至关重要,Linux内存管理涉及物理内存、虚拟内存、交换空间(Swap)等多个概念,而通过命令行工具可以全面、实时地获取这些信息,本文将详细介绍几种常用的内存查询方法,帮助用户从不同维度分析内存状态。
基础命令:free——快速查看内存概览
free
命令是最直观的内存查看工具,它以易读的格式显示系统总内存、已用内存、空闲内存、Swap空间等信息,默认情况下,free
以字节为单位输出,可通过-h
参数(human-readable)自动转换为KB、MB、GB等单位,提升可读性。
命令格式与常用参数
free [选项]
常用参数包括:
-h
:以人类可读格式显示(如1K、2M、3G);-m
:以MB为单位显示;-s
:持续监控,后跟刷新间隔(秒),如free -s 3
每3秒刷新一次;-t
:显示内存总行(包括物理内存和Swap的总和)。
示例输出与字段解析
执行free -h
后,输出如下(不同系统版本略有差异):
total used free shared buff/cache available
Mem: 7.7Gi 2.1Gi 4.2Gi 123Mi 1.4Gi 5.2Gi
Swap: 2.0Gi 0B 2.0Gi
各字段含义如下(表格形式更清晰):
字段 | 说明 |
---|---|
total | 物理内存总量(包括内核使用的内存) |
used | 已使用内存(包括应用程序、内核缓存、缓冲区等) |
free | 完全未被使用的物理内存 |
shared | 被多个进程共享的内存(如tmpfs文件系统) |
buff/cache | 缓冲区(buff)和缓存(cache)内存——Linux会尽量利用空闲内存作为缓存,提高I/O性能 |
available | 可用内存(包括free + 可回收的buff/cache),这是应用程序实际可用的内存近似值 |
Swap(total/used/free) | 交换空间总量、已使用量、空闲量;当物理内存不足时,系统会将不常用的内存页换出到Swap |
注意:used
字段包含内核缓存,可能高估实际内存占用;available
字段更能反映“真正可用”的内存,是判断内存是否紧张的关键指标。
实时监控:top/htop——动态查看内存与进程
top
命令是Linux系统中最常用的实时监控工具,它按CPU/内存使用率排序进程,并显示系统整体资源占用情况。htop
是top
的增强版(需安装,如apt install htop
或yum install htop
),支持彩色显示、鼠标操作、进程树视图等,更易用。
top命令的内存相关字段
执行top
后,前几行是系统摘要,其中内存信息如下:
KiB Mem : 7898560 total, 2156544 free, 1438592 used, 4303424 buff/cache
KiB Swap: 2097152 total, 2097152 free, 0 used
字段含义与free
命令一致,后续进程列表中,与内存相关的列包括:
RES
:进程当前占用的物理内存(不包括Swap);SHR
:进程共享的内存(如库文件);%MEM
:进程物理内存使用率(RES/总内存)。
top/htop的交互操作
- top:按
M
键按内存使用率排序进程;按d
键修改刷新间隔;按q
键退出。 - htop:默认按CPU排序,按
F6
选择“MEM%”按内存排序;按F2
可自定义显示字段;按F9
可终止选中进程。
详细分析:/proc/meminfo——原始内存数据
/proc/meminfo
是Linux内核导出的内存信息文件,内容比free
更详细,包含各种内存指标的原始数据(单位为KB),直接使用cat /proc/meminfo
查看,部分关键字段如下:
字段 | 说明 |
---|---|
MemTotal | 物理内存总量 |
MemFree | 完全未被使用的物理内存 |
MemAvailable | 可用内存(近似值,考虑可回收缓存) |
Buffers | 用于块设备缓存的内存 |
Cached | 页面缓存(如文件数据缓存) |
SwapTotal | 交换空间总量 |
SwapFree | 交换空间空闲量 |
Slab | 内核数据结构占用的内存 |
PageTables | 页表占用的内存 |
示例:
cat /proc/meminfo | grep -E "MemTotal|MemFree|MemAvailable|SwapTotal|SwapFree"
输出:
MemTotal: 7898560 kB
MemFree: 2156544 kB
MemAvailable: 5324576 kB
SwapTotal: 2097152 kB
SwapFree: 2097152 kB
该文件适合脚本化处理,或需要精确内存细节时使用。
趋势分析:vmstat——内存使用变化统计
vmstat
(Virtual Memory Statistics)可报告进程、内存、I/O、CPU等系统的动态统计信息,适合观察内存使用趋势。
命令格式与内存相关输出
vmstat [刷新间隔] [次数]
例如vmstat 3
(每3秒刷新一次,持续至用户退出),内存相关列包括:
swpd
:使用的Swap总量(KB);free
:空闲内存(KB);buff
:缓冲区内存(KB);cache
:缓存内存(KB);si
:每秒从Swap换入的内存量(KB);so
:每秒换出到Swap的内存量(KB)。
关键指标:
si
和so
持续大于0,表示系统频繁使用Swap,内存不足;free
持续很低,而buff/cache
很高,说明系统依赖缓存,但可用内存充足(可通过MemAvailable
进一步确认)。
FAQs
Q1:为什么free
命令显示的used
内存很高,但系统运行并不卡顿?
A:Linux内存管理中,used
字段包含“应用程序使用”和“内核缓存/缓冲区”,内核会尽可能将空闲内存用作缓存(如文件数据缓存),以提高I/O性能,因此used
高可能是缓存占用,并非真正“内存紧张”,应重点关注available
字段(可用内存),若available
持续低于总内存的10%-20%,且伴随系统卡顿,才说明内存不足。
Q2:如何查看某个特定进程的内存使用详情?
A:可通过ps
或top
命令查看单个进程内存。
ps aux --sort=-%mem
:按内存使用率排序所有进程,查看目标进程的%MEM
(内存使用率)、RSS
(实际物理内存占用);top -p <PID>
:监控指定进程(PID)的内存实时变化(如top -p 1234
);cat /proc/<PID>/status
:查看进程详细内存信息(如/proc/1234/status
中的VmRSS、VmSize等字段)。
原创文章,发布者:酷番叔,转转请注明出处:https://cloud.kd.cn/ask/23410.html