简介
内存 ( memory )是操作系统管理的一项重要指标,对内存使用量进行监控,有助于提前发现内存问题,避免因内存耗尽而造成的故障。
如果出现内存快被耗尽,一般会出现 OOM 的现象。
命令查看
使用 free 命令查看
free
total used free shared buff/cache availableMem: 16045460 2493184 10043920 568668 3508356 12683216Swap: 0
查看统计
free -t
free -t total used free shared buff/cache availableMem: 16189224 3981536 7458680 1902204 4749008 10029104Swap: 0 0 0Total: 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 来判断可用内存。