轉載自:https://www.cnblogs.com/panfeng412/p/drop-caches-under-linux-system-2.html
https://www.cnblogs.com/argv/p/13178269.html
[centos 7中,已經沒有extra_free_kbytes參數,直接調整min_free_kbytes就好了]
服務器在使用過程,發現沒幾個服務,但是內存的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