關於Linux cached 記憶體

2021-06-08 07:50:55 字數 1780 閱讀 9028

linux與windows不同,會存在快取記憶體,通常叫做cache memory。有些時候你會發現沒有什麼程式在執行,但是使用top或free命令看到可用記憶體會很少。

什麼是cache memory(快取記憶體):

當你讀寫檔案的時候,linux核心為了提高讀寫效率與速度,會將檔案在記憶體中進行快取,這部分記憶體就是cache memory(快取記憶體)。即使你的程式執行結束後,cache memory也不會自動釋放。這就會導致你在linux系統中程式頻繁讀寫檔案後,你會發現可用物理記憶體會很少。

其實這快取記憶體(cache memory)在你需要使用記憶體的時候會自動釋放,所以你不必擔心沒有記憶體可用。如果你希望手動去釋放cache memory(快取記憶體)的話也是有辦法的。

釋放cache memory(快取記憶體):

用下面的命令可以釋放cache memory:

[rootmin@localhost~]#echo 3 > /proc/sys/vm/drop_caches

linux中如何釋放cache記憶體

因為linux的核心機制,一般情況下不需要特意去釋放已經使用的cache。這些cache起來的內容可以增加檔案以及的讀寫速度。

先說下free命令怎麼看記憶體

[rootmin@localhost~]# free

total used free shared buffers cached

mem: 515588 295452 220136 0 2060 64040

-/+ buffers/cache: 229352 286236

swap: 682720 112 682608

其中第一行用全域性角度描述系統使用的記憶體狀況:

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釋放:

1.   to free pagecache:

[rootmin@localhost~]#echo 1 > /proc/sys/vm/drop_caches

2.   to free dentries and inodes:

[rootmin@localhost~]#echo 2 > /proc/sys/vm/drop_caches

3.   to free pagecache, dentries and inodes:

[rootmin@localhost~]#echo 3 > /proc/sys/vm/drop_caches

說明,釋放前最好sync一下,防止丟資料

關於Linux cached記憶體簡析

測試mbs系統,ap的weblogic 只是設定了1.5g記憶體,但是經過3次穩定性測試,記憶體的利用率達到99 nmon的監控揭發發現存在5.6g的cached記憶體,下面介紹一下 linux與windows不同,會存在快取記憶體,通常叫做cache memory。有些時候你會發現沒有什麼程式在執...

Linux cached過高問題

1.cached主要負責快取檔案使用,日誌檔案過大造成cached區記憶體增大把記憶體占用完 free中的buffer和cache 它們都是占用記憶體 buffer 作為buffer cache的記憶體,是塊裝置的讀寫緩衝區 cache 作為page cache的記憶體,檔案系統的cache 如果 ...

關於記憶體管理

簡單的理解,可以將記憶體分為三個部分 靜態區,棧和堆,三個部分都有自己的許可權,不可以隨便讀寫。靜態區 儲存自動全域性變數和static變數,靜態區的內容在總的程式的生命週期都存在,由編譯器在編譯的時候分配。棧 儲存區域性變數。棧上的內容只在函式的範圍內存在,當函式結束,這些內容也會被自動銷毀,效率...