转载自: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