1,443 瀏覽數

Linux – Drop Caches

有時我會發現我的 RHEL5 在開機沒多久後 free 的記憶體越來越少, 但是重點是我根本沒在跑什麼很耗記憶體資源的應用程式.

[root@benjr ~]# top

cache01

其他在 Linux 可以用來看記憶體的程式:

[root@benjr ~]# free -h
              total        used        free      shared  buff/cache   available
Mem:           741M         86M        536M        4.9M        118M        536M
Swap:          1.5G          0B        1.5G

這邊會列出一個比較特別的是 shared ,這個是該記憶體允許兩個或更多 process (程序) 共同存取這一塊共用記憶體.

[root@benjr ~]# vmstat
procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
 r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa st
 2  0      0 548168    764 120840    0    0    17     2   25   33  0  1 99  0  0

原來在 Linux 底下記憶體的使用區分為 5 種 Application Memory(歸類在 Used Memory), Buffered Memory, Cached Memory, Free Memory , Used Memory

  • Application Memory (歸類在 Used Memory)
    所有程式所佔用的記憶體數量.
  • Buffered Memory
    資料還來不及儲存到硬碟中暫儲在記憶體的資料.
  • Cached Memory
    資料已經由硬碟中讀取出來,提供給應用程式接下來使用,用以提高存取效能.
  • Free Memory
    尚未使用到的的記憶體.
  • Used Memory
    Application Memory + Buffered Memory + Cached Memory 就是目前所有有在使用的記憶體數量,有些顯示會排除 Buffered Memory 與 Cached Memory

系統所擁有的總記憶體數就是 Free Memory + Used Memory(Application Memory + Buffered Memory + Cached Memory) 其中的 Cached Memory 會依據系統的使用狀況做動態調整,借此以提高系統效能.

 /proc/sys/vm/drop_caches 的預設值為 0,也就是啟動 cache 的功能.如果你不喜歡這些功能可以把他取消掉.在 Kernel 2.6.16 之後的本版可以透過 /proc/sys/vm/drop_caches 來釋放 Cached Memory

釋放 pagecache 所使用的 Cached Memory.

[root@benjr ~]# echo 1 > /proc/sys/vm/drop_caches

釋放 dentries,inodes 所使用的 Cached Memory.

[root@benjr ~]# echo 2 > /proc/sys/vm/drop_caches

釋放 pagecache,dentry,inode 所使用的 Cached Memory.

[root@benjr ~]# echo 3 > /proc/sys/vm/drop_caches

cache02
也可以寫入  /etc/sysctl.conf 讓開機時就生效.

[root@benjr ~]# echo "vm.drop_caches = 1" >> /etc/sysctl.conf

發表迴響