ps:前天有童鞋問我,為啥我的linux系統沒執行多少程式,顯示的可用記憶體這麼少?其實linux與win的記憶體管理不同,會盡量快取記憶體以提高讀寫效能,通常叫做cache
memory。
有時候你會發現沒有什麼程式在執行,但是使用top或free命令看到可用記憶體free項會很少,此時檢視系統的 /proc/meminfo 檔案,會發現有一項 cached memory:
free命令裡各項記憶體指標說明:
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)
第二行描述應用程式的記憶體使用:
前個值表示-buffers/cache——應用程式使用的記憶體大小,used減去快取值
後個值表示+buffers/cache——所有可**用程式使用的記憶體大小,free加上快取值
總結:
-buffers/cache=used-buffers-cached
+buffers/cache=free+buffers+cached
第三行表示swap的使用:
used——已使用
free——未使用
什麼是cache memory(快取記憶體):
當你讀寫檔案的時候,linux核心為了提高讀寫效能與速度,會將檔案在記憶體中進行快取,這部分記憶體就是cache memory(快取記憶體)。即使你的程式執行結束後,cache memory也不會自動釋放。這就會導致你在linux系統中程式頻繁讀寫檔案後,你會發現可用物理記憶體會很少。
其實這快取記憶體(cache memory)在你需要使用記憶體的時候會自動釋放,所以你不必擔心沒有記憶體可用。如果你希望手動去釋放cache memory也是有辦法的。
如何釋放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起來的內容可以提高檔案以及磁碟的讀寫速度。
快取記憶體Cache的作用
快取記憶體cache的作用 現在使用的絕大多數cpu都帶有快取記憶體 cache,有的甚至整合了多極快取 而我們選擇主機板時,板上的cache數量也是乙個重要的考慮因素。早期的486整合了4 8k的一級片內cache,而現在的pentium ii至強處理器不僅整合了32k一級片內cache,還將51...
快取記憶體儲存器 cache
早期計算機層次結構 cpu暫存器 dram主儲存器和磁碟儲存。由於cpu和主存之間差距逐漸增大,便出現了小的sram快取記憶體儲存器於cpu暫存器檔案和主存之間,稱為l1快取記憶體 一級快取 cpu和主存之間效能差距繼續增大,便在l1快取記憶體和主存間出現了更大的快取記憶體,稱為l2快取記憶體。如圖...
快取記憶體Cache的對映方式
一 直接對映 簡單來說,就是整個cache,對映到主存中,是乙個主存塊組 n個連續主存塊為一組 ps 這裡說的位址已經是實體地址,不是程式中的邏輯位址,可參考cpu訪問位址的過程 主存組號 主存塊號從0開始,順序,每n塊為一組,從第0組開始 cache行數 表示在cache塊的第幾行資料,也表示在主...