Linux内存监测是系统运维和性能优化中的核心环节,通过实时或历史数据掌握内存使用情况,可有效避免内存不足导致的系统卡顿、服务崩溃等问题,Linux提供了多种内置工具和第三方工具,结合不同命令参数和输出分析,能全面监控内存状态,以下从常用工具、核心指标、分析方法三方面详细说明。
基础内存监测工具:快速查看整体状态
free
命令:最直观的内存概览
free
是Linux中最基础的内存查看工具,通过-h
(人类可读格式)、-m
(MB单位)、-s
(秒数,动态刷新)等参数,可快速输出内存总量、已用、空闲、缓冲/缓存及交换分区信息,例如free -h
输出如下:
total used free shared buff/cache available
Mem: 7.7Gi 2.1Gi 4.2Gi 256Mi 1.4Gi 5.2Gi
Swap: 2.0Gi 0B 2.0Gi
需注意available
列(可用内存)比free
列(空闲内存)更准确,因为它包含了可回收的缓存和缓冲区内存,是系统实际可分配的内存量;buff/cache
中,buffers
指块设备缓存(如磁盘读写缓存),cached
指文件页缓存(如程序数据缓存),两者在内存紧张时可被内核回收释放。
top
/htop
命令:动态监控进程级内存
top
是实时系统监控工具,默认按CPU使用率排序,通过M
键可切换为内存使用率排序,输出各进程的%MEM
(内存占用百分比)、RES
(物理内存占用)、SHR
(共享内存)、VIRT
(虚拟内存总量)等字段。
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
1234 root 20 0 1234Mi 567Mi 123Mi S 5.2 7.3 10:30 nginx
htop
是top
的增强版,支持颜色区分、树状进程结构、鼠标操作,更直观展示进程内存关系,可通过F6
选择排序字段(如MEM%
),适合快速定位内存占用异常的进程。
进阶内存监测工具:深入分析内存细节
vmstat
命令:内存与系统状态联动分析
vmstat
输出虚拟内存统计,重点关注内存相关列:swpd
(交换分区使用量,单位KB)、free
(空闲内存)、buff
( buffers大小)、cache
(cached大小)、si
(从交换区分区读入内存的数据量,KB/s)、so
(写入交换分区的数据量,KB/s),例如vmstat 1
(每秒刷新一次)输出:
procs -----------memory---------- ---swap-- -----io---- -system-- ----cpu----
r b swpd free buff cache si so bi bo in cs us sy id wa
1 0 0 4234Mi 1234Mi 5678Mi 0 0 10 20 100 200 5 2 90 3
若si
/so
持续大于0,说明系统频繁使用交换分区,内存不足;free
持续低于10%且available
不足时,需警惕内存溢出风险。
/proc/meminfo
:原始内存数据源
/proc/meminfo
是内核导出的内存信息文件,通过cat /proc/meminfo
可查看所有内存指标,如MemTotal
(总内存)、MemFree
(空闲内存)、Buffers
(块设备缓存)、Cached
(文件页缓存)、Slab
(内核数据结构缓存)、SwapTotal
/SwapFree
(交换分区总量/剩余)等,其他工具(如free
)的底层数据均来源于此,适合需要精确数值的场景。
smem
工具:进程内存精准拆分
smem
需安装(apt install smem
/yum install smem
),可计算进程的PSS(Proportional Set Size,按比例分摊的共享内存)和USS(Unique Set Size,进程独占物理内存),比top
的RES
更准确反映进程真实内存占用,例如smem -t -k
按PSS排序:
Pss USS Command
567Mi 456Mi java
234Mi 123Mi mysql
适合排查内存泄漏(如进程PSS持续增长)和共享内存占比高的场景。
核心内存指标解读与问题定位
关键指标说明
指标 | 含义 | 异常表现 |
---|---|---|
MemAvailable |
系统可立即分配的内存(含可回收缓存) | <500MB且持续下降 |
SwapUsed |
交换分区已用量 | 持续增长且si /so >0 |
buff/cache |
缓冲和缓存总量(可被内核回收) | 占比过高(如>50%)但系统仍卡顿 |
Slab |
内核数据结构缓存(如inode、dentry缓存) | 异常增长(可能内存泄漏) |
内存问题定位步骤
- 整体内存不足:
free
中available
<10%总内存,且vmstat
中si
/so
>0,需考虑增加物理内存或优化进程内存使用。 - 进程内存泄漏:
htop
/smem
中某进程内存占用持续增长,结合jmap
(Java)、pmap
(查看进程内存映射)分析进程内存分布,定位泄漏原因。 - 内存回收低效:
buff/cache
占比过高但available
不足,可通过echo 3 > /proc/sys/vm/drop_caches
手动回收缓存(需先同步文件系统),或调整vm.swappiness
(交换分区使用倾向,0-100,默认60,降低可减少swap使用)。
工具对比与使用场景
工具 | 功能特点 | 适用场景 |
---|---|---|
free |
基础概览,简洁直观 | 快速查看整体内存状态 |
top /htop |
动态监控,进程级排序 | 实时定位内存占用高的进程 |
vmstat |
内存与IO/CPU联动分析 | 判断swap使用情况及系统负载 |
/proc/meminfo |
原始数据,指标全面 | 精确获取内核内存细节 |
smem |
精准拆分进程共享内存 | 内存泄漏分析与资源占用统计 |
相关问答FAQs
Q1:为什么free -h
显示的“已用内存”比top
中各进程RES
总和少?
A:free
的“used”包含进程实际物理内存(RES
总和)、 buffers和cached,而top
的RES
仅统计进程独占物理内存。buffers
和cached是可回收内存,不属于进程“真实占用”,因此free
的used可能小于top的RES总和,需结合available
判断可用内存。
Q2:如何判断Linux系统内存是否真的不足?
A:需综合三个指标:①free
中available
持续低于500MB(或总内存10%);②vmstat
中si
/so
持续大于0(频繁使用swap);③系统出现卡顿、OOM Killer(内存不足杀手)终止进程(日志可见“Out of memory”),若仅buff/cache
高但available
充足,说明内存被合理缓存,无需扩容。
原创文章,发布者:酷番叔,转转请注明出处:https://cloud.kd.cn/ask/37763.html