關於Linux的緩存內存 Cache Memory詳解

PS:前天有童鞋問我,爲啥個人Linux系統沒運行多少程序,顯示的可用內存這麼少?其實Linux與Win的內存管理不一樣,會盡可能緩存內存以提升讀寫性能,一般叫作Cache Memory。node

有時候你會發現沒有什麼程序在運行,可是使用top或free命令看到可用內存free項會不多,此時查看系統的 /proc/meminfo 文件,會發現有一項 Cached Memory:linux

輸入cat /proc/meminfo查看:

MemTotal: 16425996 kB
MemFree: 5698808 kB
Buffers: 380904 kB
Cached: 9389356 kB
SwapCached: 212 kB
Active: 6569200 kB
Inactive: 3725364 kB
HighTotal: 0 kB
HighFree: 0 kB
LowTotal: 16425996 kB
LowFree: 5698808 kB
SwapTotal: 8273464 kB
SwapFree: 8273252 kB
Dirty: 980 kB
Writeback: 0 kB
AnonPages: 524108 kB
Mapped: 24568 kB
Slab: 381776 kB
PageTables: 7496 kB
NFS_Unstable: 0 kB
Bounce: 0 kB
CommitLimit: 16486460 kB
Committed_AS: 2143856 kB
VmallocTotal: 34359738367 kB
VmallocUsed: 267656 kB
VmallocChunk: 34359469303 kB
HugePages_Total: 0
HugePages_Free: 0
HugePages_Rsvd: 0
Hugepagesize: 2048 kB

緩存

free命令裏各項內存指標說明:app


total used free shared buffers cached
Mem: 16425996 10727220 5698776 0 380904 9389832
-/+ buffers/cache: 956484 15469512
Swap: 8273464 212 8273252

其中第一行用全局角度描述系統使用的內存情況:
total——總物理內存
used——已使用內存,通常狀況這個值會比較大,由於這個值包括了cache+應用程序使用的內存
free——徹底未被使用的內存
shared——應用程序共享內存
buffers——緩存,主要用於目錄方面,inode值等(ls大目錄可看到這個值增長)
cached——緩存,用於已打開的文件
總結:
total=used+free
used=buffers+cached (maybe add shared also)post

第二行描述應用程序的內存使用:
前個值表示-buffers/cache——應用程序使用的內存大小,used減去緩存值
後個值表示+buffers/cache——全部可供應用程序使用的內存大小,free加上緩存值
總結:
-buffers/cache=used-buffers-cached
+buffers/cache=free+buffers+cached性能

第三行表示swap的使用:
used——已使用
free——未使用spa

什麼是Cache Memory(緩存內存):code

當你讀寫文件的時候,Linux內核爲了提升讀寫性能與速度,會將文件在內存中進行緩存,這部份內存就是Cache Memory(緩存內存)。即便你的程序運行結束後,Cache Memory也不會自動釋放。這就會致使你在Linux系統中程序頻繁讀寫文件後,你會發現可用物理內存會不多。內存

其實這緩存內存(Cache Memory)在你須要使用內存的時候會自動釋放,因此你沒必要擔憂沒有內存可用。若是你但願手動去釋放Cache Memory也是有辦法的。get

如何釋放Cache Memory(緩存內存):

用下面的命令能夠釋放Cache Memory:

To free pagecache:
echo 1 > /proc/sys/vm/drop_caches
To free dentries and inodes:
echo 2 > /proc/sys/vm/drop_caches
To free pagecache, dentries and inodes:
echo 3 > /proc/sys/vm/drop_caches

注意,釋放前最好sync一下,防止丟失數據。

總結:我的經驗認爲不必手動釋放,這種內存管理方式也是比win優勝的地方之一!由於Linux的內核內存管理機制,通常狀況下不須要特地去釋放已經使用的cache。這些cache起來的內容能夠提升文件以及磁盤的讀寫速度。

相關文章
相關標籤/搜索