linux free命令available小於free值


問題:前段時間在做服務器巡檢時發現系統可用內存值小於空閑內存值

 分析:查詢網上各種資料,都說的是 available=free + buff/cache 這樣一個大致計算方式,按這種方式解釋不了上面的情況。

最后查到linux內核源代碼中關於avaliable值的定義,得出如下公式:

MemAvailable = MemFree - LowWaterMark + (PageCache - min(PageCache / 2, LowWaterMark))

其中 LowWaterMark 由 min_free_kbytes 參數影響,計算方式如下:

watermark[min] = min_free_kbytes換算為page單位即可,假設為min_free_pages。(因為是每個zone各有一套watermark參數,實際計算效果是根據各個zone大小所占內存總大小的比例,而算出來的per zone min_free_pages)
watermark[low] = watermark[min] * 5 / 4
watermark[high] = watermark[min] * 3 / 2

結論:當在空閑內存較小,且又設置內存回收閾值的min_free_kbytes的情況下,就會出現上圖的情況,可通過減少min_free_kbytes值來使可用內存值大於空閑內存。

參考資料:

https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=34e431b0ae398fc54ea69ff85ec700722c9da773

https://www.cnblogs.com/longchang/p/10736970.html


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM