在Linux系统中,内存管理是系统性能优化的核心环节,准确查看内存使用情况有助于诊断性能瓶颈、合理分配资源,Linux内存主要分为物理内存(RAM)和虚拟内存(Swap),其中物理内存是系统直接使用的内存,Swap则是硬盘上作为内存扩展的空间,本文将详细介绍Linux下查看内存使用的多种命令及其使用场景,帮助用户全面掌握内存监控方法。
基础内存查看命令:free
free
命令是最直观查看内存使用情况的工具,通过它可以快速了解物理内存和Swap的总量、已用、空闲等信息,其基本语法为free [选项]
,常用选项包括-b
(字节)、-k
(KB)、-m
(MB)、-g
(GB)、-h
(人类可读格式)等。
示例输出与解析
执行free -h
(推荐使用人类可读格式)后,输出如下:
total used free shared buff/cache available
Mem: 7.7Gi 2.1Gi 4.2Gi 256Mi 1.4Gi 5.3Gi
Swap: 2.0Gi 0B 2.0Gi
- total:内存总量(物理内存或Swap总大小)。
- used:已使用内存(注意:这里的“used”包含buffers和cached,并非完全被进程占用的内存)。
- free:完全空闲的内存。
- shared:被多个进程共享的内存(如tmpfs文件系统)。
- buff/cache: buffers(内核缓冲区)和cached(页面缓存)的总和,这部分内存可被回收,因此实际可用内存需参考
available
。 - available:真正可用的内存(包括空闲内存和可回收的buff/cache),比
free
更准确,是判断内存是否充足的重要指标。
不同选项对比
选项 | 输出单位 | 适用场景 |
---|---|---|
free -b |
字节 | 精确计算,适合脚本处理 |
free -m |
MB | 中等规模内存查看,默认单位 |
free -h |
人类可读(KB/MB/GB) | 日常查看,直观易懂 |
free -s 2 -c 5 |
每隔2秒刷新,共5次 | 动态监控内存变化趋势 |
实时进程内存监控:top与htop
top
和htop
是动态监控系统资源(包括内存)的常用工具,可实时查看各进程的内存占用情况,htop
是top
的增强版(默认未安装,需通过sudo apt install htop
或sudo yum install htop
安装),界面更友好,支持鼠标操作。
top命令的内存相关字段
执行top
后,按M
键可按内存使用率排序,输出中与内存相关的字段包括:
- VIRT:虚拟内存大小(进程使用的虚拟内存总量,包括实际物理内存、Swap和共享内存)。
- RES:常驻内存集(进程当前占用的物理内存,不包括Swap和可回收的cached)。
- SHR:共享内存(进程与其他进程共享的内存大小)。
- %MEM:内存使用率(RES/物理内存总量×100%)。
htop的优势
相比top
,htop
提供更直观的界面:
- 彩色区分不同类型的内存(如绿色表示进程占用,蓝色表示cached)。
- 支持垂直拆分窗口,同时查看多个进程的内存信息。
- 按
F6
可选择排序字段(如按%MEM、RES排序),按F9
可直接杀死进程。 - 显示
SReclaimable
(可回收的Slab缓存),更准确地反映可用内存。
示例:htop内存界面
在htop界面中,上方显示整体内存使用情况(与free -h
类似),下方为进程列表,其中%MEM
列可直接查看各进程内存占比,便于定位内存占用大户。
内核内存信息查看:/proc/meminfo
/proc/meminfo
是Linux内核提供的内存信息虚拟文件,内容比free
更详细,适合深入分析内存状态,可通过cat /proc/meminfo
查看,关键字段包括:
- MemTotal:物理内存总量。
- MemFree:完全空闲的物理内存。
- Buffers:内核缓冲区(用于块设备I/O)。
- Cached:页面缓存(用于文件缓存)。
- SwapTotal:Swap总大小。
- SwapFree:空闲Swap大小。
- Slab:内核数据结构缓存(不可回收部分)。
- SReclaimable:可回收的Slab缓存(属于cached的一部分)。
示例输出片段
MemTotal: 8045792 kB
MemFree: 4325376 kB
Buffers: 123456 kB
Cached: 1567890 kB
SwapTotal: 2097152 kB
SwapFree: 2097152 kB
Slab: 234567 kB
SReclaimable: 98765 kB
通过/proc/meminfo
可计算可用内存:MemFree + Cached + SReclaimable - Buffers
(注意不同Linux版本计算方式略有差异)。
内存统计与趋势分析:vmstat
vmstat
(Virtual Memory Statistics)可报告进程、内存、I/O、CPU等系统的整体统计信息,适合分析内存使用趋势,语法为vmstat [选项] [刷新间隔] [次数]
。
示例:vmstat 2 3
每2秒刷新一次,共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 4325376 123456 1567890 0 0 10 20 100 150 5 2 92 1 0
2 0 0 4310000 123456 1570000 0 0 5 15 120 160 6 3 90 1 0
与内存相关的列:
- swpd:已使用的Swap大小(KB),若持续大于0,说明物理内存不足。
- free:空闲内存(KB)。
- buff:缓冲区大小(KB)。
- cache:缓存大小(KB)。
- si/so:每秒从Swap读入/写入的内存量(KB),若si、so持续较高,说明系统频繁使用Swap,性能可能下降。
进程内存详情分析:ps
ps
命令可查看特定进程的内存使用情况,常用选项-eo
自定义输出格式,或--sort
排序。
示例:查看前10个内存占用最高的进程
ps -eo pid,ppid,cmd,%mem,%cpu --sort=-%mem | head -n 11
输出:
PID PPID CMD %MEM %CPU
1234 1 /usr/lib/firefox/firefox 15.2 8.5
5678 1 /usr/bin/code 12.1 5.2
...
- %MEM:进程内存占用率(与top中的%MEM一致)。
- RSS(可通过
ps -eo pid,rss,cmd
查看):常驻内存集(物理内存占用,KB)。
高级内存分析工具:smem
smem
是一款更精确的内存分析工具,可计算进程的PSS(Proportional Set Size,按比例分摊的共享内存)和USS(Unique Set Size,进程独占的物理内存),避免重复计算共享内存,适合分析内存泄漏,需安装:sudo apt install smem
。
示例:查看进程内存占比(按USS排序)
smem -t -p | sort -k 4 -nr | head -n 10
输出:
Pid USS PSS Swap Command
1234 120MB 150MB 0MB /usr/lib/firefox/firefox
5678 80MB 100MB 0MB /usr/bin/code
- USS:进程独占内存,完全释放该进程可回收的内存量,比RSS更准确。
- PSS:按比例分摊共享内存,若多个进程共享同一内存块,PSS为共享内存除以共享进程数。
不同场景下的工具选择
场景 | 推荐工具 | 原因 |
---|---|---|
快速查看整体内存使用 | free -h |
直观显示总量、已用、可用 |
实时监控进程内存 | htop (或top ) |
动态刷新,支持排序和交互操作 |
分析内存使用趋势 | vmstat |
统计历史数据,判断是否频繁使用Swap |
深入查看内核内存 | /proc/meminfo |
提供最详细的内核内存参数 |
定位内存泄漏 | smem |
计算USS/PSS,准确分析进程内存占用 |
脚本自动化处理 | free -b /vmstat |
输出格式固定,便于解析 |
相关问答FAQs
Q1:为什么free
命令显示的“已用内存”与top
/htop
中各进程内存占用总和不一致?
A:这是因为free
的used
字段包含了buffers
和cached
,而top
/htop
中的RES
(或htop
的MEM
)仅统计进程实际占用的物理内存(不包括可回收的buffers
和cached
),实际可用内存应参考free
的available
字段(=空闲内存+可回收的cached
+SReclaimable
–buffers
),它更准确地反映了系统当前可用的内存量。
Q2:如何判断Linux系统内存是否不足?
A:可通过以下指标综合判断:
- Swap使用率:若
SwapFree
持续为0或si
/so
(vmstat中的Swap读写)频繁大于0,说明物理内存不足,系统频繁使用Swap,性能会显著下降。 available
内存:若free -h
中的available
持续低于总内存的10%(例如8GB内存中可用内存低于800MB),且系统响应变慢,说明内存紧张。- 进程内存占用:通过
htop
或ps
发现某个进程内存占用异常高(如超过50%总内存),且持续增长,可能存在内存泄漏。 - 系统延迟:使用
iostat
或dstat
发现I/O等待时间增加,可能因内存不足导致频繁读写Swap。
原创文章,发布者:酷番叔,转转请注明出处:https://cloud.kd.cn/ask/32145.html