問題描述
系統長期運行后,free命令查看系統內存,發現剩余內存不足,大部分是buffers和cached。

問題分析
在Linux操作系統中,緩沖(buffer)和緩存(cache)占用了部分內存。這些是操作系統用于提高文件系統和磁盤訪問性能的正常數據結構。然而,如果你發現內存占用過高,可能需要采取一些措施來優化系統。
在 Linux 的內存管理中,buffer是Linux內存中的Buffer cache。cache是Linux內存中的Page cache。
· Buffer cache:主要是當系統對塊設備進行讀寫的時候,對塊進行數據緩存的系統來使用,即對塊的操作會使用buffer cache進行緩存。
例如:當對一個文件進行寫操作的時候,page cache 的內容會被改變,而buffer cache則可以用來將page標記為不同的緩沖區,并記錄是哪一個緩沖區被修改了。內核在后續執行臟數據的回寫writeback時,就不用將整個page寫回,而只需要寫回修改的部分可。
· Page cache:主要用來作為文件系統上的文件數據的緩存來用,尤其是針對當進程文件有read/write操作的時候。Linux默認會將讀取的文件內容緩存在內存中,方便后續使用。
Linux默認使用的是lazy模式,即內存如果還夠用,則不會主動釋放當前的占用的buffer和cache,如果需要內存,則會自動釋放buffer和cache,所以正常情況下,cache占用高不會對系統造成影響。
處理方法
buffer和cache是Linux對系統設備的正常環境,占用內存并不會影響系統的運行,反而強制清除cache會導致讀取磁盤數據時需要重新通過IO從磁盤讀取,影響系統運行速度。
說明如需清理系統buffer和cache,可以執行以下命令:
# echo 3 > /proc/sys/vm/drop_caches
根據內存大小可能需要幾秒鐘,執行完后相應內存被釋放。