转载自:https://www.cnblogs.com/panfeng412/p/drop-caches-under-linux-system-2.html

服务器在使用过程,发现没几个服务,但是内存的free却几近耗尽

当有请求需要申请大内存的时候,有时会出现失败的情况

分析内存的占用中,buffers/cached占用了接近70%,而网上一些资料都是简单的一个处理drop_caches清空就了事

实际服务器过程中,诸多因素决定这个操作不适用,因此考虑了解Linux自动回收的机制

先是了解了vfs_cache_pressure,但是参数的调整只是觉得优先保存哪部分的缓存而已,实际没有涉及到触发阀值的设置

后了解到extra_free_kbytes的参数设定,没有时间详细查看Linux的内核源码以了解详细机制,在网上找到了上述的文章中,也碰到了同样的需求

写的很详细,实测有效,收录起来。

1. 首先,grep low /proc/zoneinfo,得到如下结果:

        low      1
        low      380
        low      12067

2. 将以上3列加起来,乘以4KB,就是这个阈值,通过这个方法计算后发现当前服务器的回收阈值只有48MB,因此很难看到这一现象,实际中可能等不到回收,操作系统就会hang住没响应了。

3. 可以通过以下方法调大这个阈值:将vm.extra_free_kbytes设置为vm.min_free_kbytes和一样大,则/proc/zoneinfo中对应的low阈值就会增大一倍,同时high阈值也会随之增长,以此类推。

$ sudo sysctl -a | grep free_kbytes
vm.min_free_kbytes = 39847
vm.extra_free_kbytes = 0
$ sudo sysctl -w vm.extra_free_kbytes=836787 ######1GB
02-09 22:41