简介

内存 ( memory )是操作系统管理的一项重要指标,对内存使用量进行监控,有助于提前发现内存问题,避免因内存耗尽而造成的故障。

如果出现内存快被耗尽,一般会出现 OOM 的现象。

命令查看

使用 free 命令查看

free
              total        used        free      shared  buff/cache   available
Mem:       16045460     2493184    10043920      568668     3508356    12683216
Swap:             0

查看统计

free -t
free -t
              total        used        free      shared  buff/cache   available
Mem:       16189224     3981536     7458680     1902204     4749008    10029104
Swap:             0           0           0
Total:     16189224     3981536     7458680

默认是使用 byte 位单位,也可以使用 -k 或 -m 或 -g 来切换值单位

详细指标

Linux 内核负责统计内存使用量并暴露在 /proc 伪文件系统中,路径是 /proc/meminfo 。一般而言,需要重点关注的指标如下: 内存使用量指标(字节):

total        物理内存总量
free        空闲内存(未使用)
buffers        内核缓冲区
cached        文件缓冲页
slab        内核 slab 数据结构
cache        cached 以及 slab 之和
g_free        广义空闲内存
used        已使用内存
active        活跃内存
inactive        非活跃内存
available        可用内存

total

total 表示 物理内存总量 ,单位为 字节 ,对应 /proc/meminfo 的 MemTotal 字段。

free

free 表示 空闲内存量 ,单位为 字节 , 对应 /proc/meminfo 的 MemFree 字段。

buffers

buffers 表示 内核缓冲区 ,单位为 字节 ,对应 /proc/meminfo 的 Buffers 字段。

cached

cached 表示 文件缓冲页 ,单位为 字节 ,对应 /proc/meminfo 的 Cached 字段。

slab

slab 表示 内核 slab 数据结构 ,单位为 字节 ,对应 /proc/meminfo 的 Slab 字段。

cache

cache 与 free 命令中的 cache 相同,即 cached 以及 slab 之和:

cache = cached + slab

g_free

g_free 表示 广义空闲内存 ( generalized free ),单位为 字节 ,计算方式如下:

g_free = free + buffers + cache

buffers 和 cache 是系统为了提升性能而使用的缓存,内存紧张时可随时回收另做它用。因此,这部分内存在某种意义上可以认为是空闲的,这就是 广义空闲内存 的由来。

used

used 表示 已用内存 ,单位为 字节 ,计算方式如下:

used = total - g_free = total - free - buffers - cache

active

active 表示 活跃内存 ,单位为 字节 ,对应 /proc/meminfo 的 Active 字段。

活跃内存 是指最近经常访问的内存,通常不会被重新分配,除非非常必要。

inactive

inactive 表示 非活跃内存 ,单位为 字节 ,对应 /proc/meminfo 的 Inactive 字段。

非活跃内存 是指最近较少访问的内存,需要新分配内存时,这部分优先选择。

available

从 3.14 内核版本开始提供在 /proc/meminfo 的 MemAvailable 字段,available 表示 可用内存 ,单位为 字节。

可用内存 指的是可用于启动一个新应用进程的内存,该指标是内核提供的一个估计值。它同样结合 free 以及 cache 两部分内存,但是考虑到 cache 因使用而不能释放的情况。因此,可以认为:

free <= available <= g_free

总结

在 CentOS 7 上基本都是看 available 来判断可用内存。