天天看點

Linux清除系統緩存釋放記憶體指令介紹

1. drop_caches

在Documentation/sysctl/vm.txt中有如下描述:

drop_caches:Writing to this will cause the kernel to drop clean caches, dentries and inodes from memory, causing that memory to become free.

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

As this is a non-destructive operation and dirty objects are not freeable, the user should run `sync' first.

2. cache 和 buffer的差別

  Cache:高速緩存,是位于CPU與主記憶體間的一種容量較小但速度很高的存儲器。由于CPU的速度遠高于主記憶體,CPU直接從記憶體中存取資料要等待一定時間周期,Cache中儲存着CPU剛用過或循環使用的一部分資料,當CPU再次使用該部分資料時可從Cache中直接調用,這樣就減少了CPU的等待時間,提高了系統的效率。Cache又分為一級Cache(L1 Cache)和二級Cache(L2 Cache),L1 Cache內建在CPU内部,L2 Cache早期一般是焊在主機闆上,現在也都內建在CPU内部,常見的容量有256KB或512KB L2 Cache。

Buffer:緩沖區,一個用于存儲速度不同步的裝置或優先級不同的裝置之間傳輸資料的區域。通過緩沖區,可以使程序之間的互相等待變少,進而使從速度慢的裝置讀入資料時,速度快的裝置的操作程序不發生間斷。

  Free中的buffer和cache:(它們都是占用記憶體):

  buffer : 作為buffer cache的記憶體,是塊裝置的讀寫緩沖區

  cache: 作為page cache的記憶體, 檔案系統的cache

  如果 cache 的值很大,說明cache住的檔案數很多。如果頻繁通路到的檔案都能被cache住,那麼磁盤的讀IO bi會非常小。

Linux/Centos/Ubuntu清除系統緩存釋放記憶體指令具體操作步驟

  為了提高磁盤存取效率,Linux做了一些精心的設計,除了對dentry進行緩存(用于VFS,加速檔案路徑名到inode的轉換),還采取了兩種主要 Cache方式:Buffer Cache和Page Cache。前者針對磁盤塊的讀寫,後者針對檔案inode的讀寫。這些Cache有效縮短了 I/O系統調用(比如read,write,getdents)的時間。linux記憶體可使用的計算方法:可用記憶體=free+buffers+cached,清理緩存按如下順序操作即可:

1、目前記憶體使用情況:free

                 total            used            free          shared     buffers     cached

Mem:      12296092    11812364     483728          0          390868    10336804

-/+ buffers/cache:    1084692   11211400

Swap:      8385920        164    8385756

free指令解釋:

total 記憶體總數

used 已經使用的記憶體數

free 空閑的記憶體數

shared 多個程序共享的記憶體總額

buffers Buffer Cache和cached Page Cache 磁盤緩存的大小

-buffers/cache 的記憶體數:used - buffers - cached

+buffers/cache 的記憶體數:free + buffers + cached

2、sync(sync 指令運作 sync 子例程。如果必須停止系統,則運作 sync 指令以確定檔案系統的完整性。sync 指令将所有未寫的系統緩沖區寫到磁盤中,包含已修改的 i-node、已延遲的塊 I/O 和讀寫映射檔案,一定要在第3步之前運作這個指令)

3、echo 3 > /proc/sys/vm/drop_caches

4、檢視記憶體使用情況:free

               total      used      free        shared    buffers     cached

Mem:      12296092     890740   11405352          0       3012     131116

-/+ buffers/cache:     756612   11539480

Swap:      8385920        164    8385756

5、echo 0 > /proc/sys/vm/drop_caches  

   這是一種比較常用的釋放緩存的方法,但是建議還是不要經常使用,如果swap沒有使用很多的情況下,可以不做任何操作,以保證系統穩定運作,一但swap開始使用了,就考慮分析程式或者增加實體記憶體吧。一般情況下,應用在系統上穩定運作了,free值也會保持在一個穩定值的,雖然看上去可能比較小。當發生記憶體不足、應用擷取不到可用記憶體、OOM錯誤等問題時,還是更應該去分析應用方面的原因,如使用者量太大導緻記憶體不足、發生應用記憶體溢出等情況,否則,清空buffer,強制騰出free的大小,可能隻是把問題給暫時屏蔽了。

繼續閱讀