在了解cache和buffer的區(qū)別之前,我們需要先知道,Linux 操作系統(tǒng)的內(nèi)存管理方式和Windows不同,Linux會盡量多的利用內(nèi)存,讓盡可能多的內(nèi)存參與工作(做cache) 用于提高性能。所以我們常常看到Linux的空閑內(nèi)存總是很小,當你的程序需要更多內(nèi)存時,Linux系統(tǒng)會把做cache的內(nèi)存還給你,讓你來運行你的程序。
free -m :查看內(nèi)存情況,單位為MB。
total 內(nèi)存總數(shù)
used 已經(jīng)使用的內(nèi)存數(shù)(我的程序使用內(nèi)存數(shù)量+系統(tǒng)緩存使用的內(nèi)數(shù)量)
free 空閑的物理內(nèi)存數(shù)(是真正的空閑,未被任何程序占用)
shared 多個進程共享的內(nèi)存總額
buffers 磁盤緩存(Buffer Cache)的大?。商岣呦到y(tǒng)I/O調(diào)用的性能)
cached 磁盤緩存(Page Cache)的大小(可提高系統(tǒng)I/O調(diào)用的性能)
-buffers/cache 表示已被我們的程序使用的內(nèi)存數(shù),計算方法:used - buffers - cached
+buffers/cache 表示還可已被我使用的內(nèi)存數(shù),計算方法:free + buffers + cached
操作系統(tǒng)目前可用內(nèi)存總量=free + buffers + cached,上圖差不多是2574M
buffers是用來給塊設(shè)備做的緩沖大小、buffers是用來存儲目錄里面有什么內(nèi)容,權(quán)限等等
cached用來給文件做緩沖,用來記憶我們打開的文件.
即使你的程序運行結(jié)束后,Cache Memory也不會自動釋放。
這就會導(dǎo)致你在Linux系統(tǒng)中程序頻繁讀寫文件后,你會發(fā)現(xiàn)可用物理內(nèi)存(free)會很少。
其實這緩存內(nèi)存(Cache Memory)在你需要使用內(nèi)存的時候會自動釋放,所以你不必擔(dān)心沒有內(nèi)存可用。
如果你覺得這樣看著難受,你可以手動去釋放Cache Memory。
手動釋放緩存
---------------------------------------
/proc是一個虛擬文件系統(tǒng),我們可以通過對它的讀寫操作做為與kernel實體間進行通信的一種手段。也就是說可以通過修改/proc中的文件,來對當前kernel的行為做出調(diào)整。那么我們可以通過調(diào)整/proc/sys/vm/drop_caches來釋放內(nèi)存。操作如下:
cat /proc/sys/vm/drop_caches 查看默認值
先手動執(zhí)行sync命令,sync 命令將所有未寫的系統(tǒng)緩沖區(qū)寫到磁盤中,包含已修改的 i-node、已延遲的塊 I/O 和讀寫映射文件。
# echo 3 > /proc/sys/vm/drop_caches
# cat /proc/sys/vm/drop_caches
3
將/proc/sys/vm/drop_caches值設(shè)為3
再來運行free命令。可以看出來有效的釋放了buffer和cache。
清cache:echo 1 > /proc/sys/vm/drop_caches
清buffer:echo 2 > /proc/sys/vm/drop_caches
清cache+buffer:echo 3> /proc/sys/vm/drop_caches
清緩存的另一種方法:
sysctl -w vm.drop_caches=3