在Linux系统中,内存管理是系统性能优化的核心环节,准确查看内存使用率是判断系统负载、排查性能问题的关键,本文将详细介绍Linux系统中查看内存使用率的多种方法,包括常用命令、参数解析及适用场景,帮助用户全面掌握内存监控技巧。
使用free
命令快速查看内存概览
free
是最基础的内存查看命令,通过读取/proc/meminfo
文件,直观展示系统内存的总体使用情况,其基本用法如下:
free [-h|-m|-g] [-s]
参数说明:
-h
:以人类可读格式显示(如KB、MB、GB),默认单位为KB;-m
/-g
:分别以MB/GB为单位显示;-s N
:每N秒刷新一次,适合动态监控(如free -s 2
)。
输出示例(以free -h
为例):
total used free shared buff/cache available
Mem: 7.7Gi 2.1Gi 4.2Gi 128Mi 1.4Gi 5.3Gi
Swap: 2.0Gi 0B 2.0Gi
字段解析:
- total:物理内存总容量;
- used:已使用内存(包含应用程序占用、内核缓冲、缓存等);
- free:完全未被使用的内存;
- shared:被多个进程共享的内存(如tmpfs);
- buff/cache:缓冲区(buff)和缓存(cache)内存,属于可回收内存;
- available:实际可用内存(重点!包含free + 可回收的buff/cache),是判断内存是否紧张的核心指标,若
available
持续低于总内存的10%,可能触发OOM(Out of Memory)。
使用top
/htop
命令动态监控内存与进程
top
和htop
是实时监控系统资源的工具,不仅能查看整体内存使用率,还能定位具体的高内存占用进程。
top
命令
top [-m] [-p PID]
-m
:仅显示内存相关信息(默认显示CPU、内存等);-p PID
:监控指定进程(如top -p 1234
)。
内存相关列说明:
- %MEM:进程内存占用率(
进程驻留内存/总物理内存×100%
); - RES:进程驻留集大小(物理内存占用,不含共享内存);
- SHR:进程共享内存大小;
- VIRT:进程虚拟内存大小(含物理内存、交换区、共享库等)。
操作技巧:按M
可按%MEM
降序排序(高内存进程置顶),按q
退出。
htop
命令(top
的增强版)
htop
提供更友好的界面(如颜色区分、进程树、快捷键操作),需提前安装(Ubuntu/Debian:apt install htop
;CentOS:yum install htop
)。
核心功能:
- 界面顶部实时显示内存使用率(如
Mem[|||||||||||||||||||||||||||||||||||||||||] 27%
); - 按
F6
可选择排序字段(如PERCENT_MEM
按内存占用率排序); - 按
F9
可终止选中进程,适合快速处理异常进程。
使用vmstat
命令分析内存趋势
vmstat
(Virtual Memory Statistics)侧重于内存使用的动态趋势,适合分析内存压力和交换分区活动。
vmstat [-s] [时间间隔 [次数]]
-s
:显示内存事件的详细统计(如内存分配、回收次数);时间间隔
:刷新间隔(秒),次数
:刷新总次数(如vmstat 2 5
表示每秒刷新1次,共5次)。
输出示例(关键列):
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 4.2Gi 128Mi 1.4Gi 0 0 45 12 60 120 5 2 92 0 0
字段解析:
- swpd:已使用的交换分区大小(若持续增长,说明物理内存不足);
- free:空闲物理内存;
- buff:缓冲区内存(用于文件系统元数据);
- cache:页面缓存(用于文件数据缓存);
- si/so:每秒从交换区分入/分出的内存(
so>0
且持续表示频繁换页,性能下降)。
通过/proc/meminfo
文件获取原始数据
/proc/meminfo
是内核提供的内存信息文本文件,适合脚本处理或精确查询特定指标。
cat /proc/meminfo
关键字段示例:
MemTotal: 7947168 kB # 物理内存总量 MemFree: 4325884 kB # 空闲内存 MemAvailable: 5451232 kB # 实际可用内存(推荐使用) Buffers: 131072 kB # 缓冲区 Cached: 1456128 kB # 页面缓存 SwapTotal: 2097152 kB # 交换区总量 SwapFree: 2097152 kB # 交换区空闲
提取特定字段(如查看可用内存):
grep MemAvailable /proc/meminfo | awk '{print $2}'
命令对比与适用场景
命令 | 适用场景 | 优点 | 缺点 |
---|---|---|---|
free |
快速查看内存概览,判断可用内存 | 简单直观,默认预装 | 信息较少,无进程级数据 |
top |
实时监控进程内存占用 | 动态更新,可排序筛选 | 界面复杂,需手动操作 |
htop |
高效定位高内存进程,交互式监控 | 界面友好,支持快捷键和进程树 | 需额外安装 |
vmstat |
分析内存趋势和交换分区活动 | 提供动态统计,适合脚本 | 无进程级数据,需理解字段含义 |
/proc/meminfo |
获取原始数据,脚本处理 | 数据最全面,可精确查询 | 输出冗长,需手动解析 |
相关问答FAQs
Q1:为什么free
命令显示的used
内存很高,但系统运行并不卡顿?
A:Linux内存管理中,used
内存包含两部分:应用程序实际占用和内核缓存(buff/cache),后者是为了提升文件读写性能而预留的内存,属于“可回收内存”,当应用程序需要内存时,内核会自动释放缓存,因此即使used
很高,只要available
内存充足(通常建议大于总内存的10%),系统就不会卡顿,可通过free -h
查看available
字段判断实际可用内存。
Q2:如何查看某个特定进程的内存使用详情?
A:可通过以下命令定位进程内存:
ps
命令:ps -p PID -o pid,ppid,cmd,%mem,rss,vsz
,其中%mem
为内存占用率,rss
为物理内存占用(KB),vsz
为虚拟内存占用(KB)。top
/htop
:在top
中按P
或M
排序(CPU/内存),或在htop
中选中进程按F9
终止。smem
工具(需安装):smem -p PID
可查看进程的PSS(Proportional Set Size,更准确的内存占用统计,避免重复计算共享内存)。
原创文章,发布者:酷番叔,转转请注明出处:https://cloud.kd.cn/ask/21594.html