细说慢道Linux内存使用率


今天有同事怀疑服务器内存不足需要扩容,上服务器检查后结果更是吓坏了他,火急火燎的去申请内存扩容,然后他报上去的使用率和监控看到的使用率相差较大,扩容申请被拒了。回来想不明白找我讨论。通过了解我得知他是用过sar来统计了内存的使用率。

不论使用sar、top、free查看到的内存信息,其中肯定会包含used、free、buff/cache几个项目,这其中used表示使用的内存量,free表示空闲的内存量,buff/cache这两项分别是写缓存和读缓存,Linux为了使内存使用高效会使用写缓存和读缓存在内存空闲时将其利用,在需要使用内存的时候,将其中的内存释放出来给程序使用。

那么实际的内存使用量计算方式如下:

used-buff-cache

实际的内存剩余量计算方式如下:

free+buff+cache

以下图为例来说明一下

可以看出图中内存使用率高达85.8%,但通过我们之前说的算法来计算一下,我这个服务器内存总量是1G,那么实际的内存使用率应该是(878.2-1.5-464.4)/1024=0.403也就是40.3%。

通过top或者free查到的结果都可以使用这样的方式进行计算。但是通过我的观察发现,在CentOS8,debian10中top、free查到的used大小已经不再包含buff/cache的大小了,openEuler 20.03 LTS SP2中top、free查到的used大小是包含buff/cache大小的。在查看内存消耗时候需要大家自己斟辩。

CentOS 8中sar、free、top对比

debian 10中sar、free、top对比

openEuler 20.03 LTS SP2中sar、free、top对比