前言
在使用 RHEL/CentOS 時會因為它的 Memory Buffer/Cache 機制 (為了盡量減少 Disk I/O),常常會讓我覺得好像發生了 Memory Leak 的感覺,如果您覺得有這種錯覺而且真的想要手動清空目前佔用的 Memory Buffer/Cache,那麼就繼續接著看下去吧。實作環境
- CentOS 5.6 (64bit)
安裝及設定
安裝 CentOS 5.6 的伺服器實體記憶體有 16 GB,不過當您使用 top or free -m 指令查看 Memory 的使用量時,會發現怎麼 Memory 感覺所剩無幾 (Memory Buffer/Cache 機制!!),所以您可以使用 Drop Cache 機制來手動釋放了,預設數值為 0 您可以送入 1、2、3 進去給 /proc/sys/vm/drop_caches,並且在執行前強烈建議先執行 sync 是比較保險的作法,至於數值 1 ~ 3 所代表的意義及說明如下: 詳細說明請參考 Performance Tuning Guide - 5.4 Tuning Virtual Memory。- 1: 釋放所有 Page Cache Memory。
- 2: 釋放所有 Unused Slab Cache Memory。
- 3: 釋放所有 Page Cache 及 Slab Cache Memory。
因為是上線中的機器,所以我只執行釋放所有 Page Cache Memory 而以,可以很明顯的看到釋放前 Free Memory 為 3743 MB 而釋放後為 13935 MB。
# free -m
total used free shared buffers cached
Mem: 15993 12249 3743 0 1384 7888
-/+ buffers/cache: 2976 13016
Swap: 8236 0 8236
# sync;sync;sync
# echo 1 > /proc/sys/vm/drop_caches
# echo 0 > /proc/sys/vm/drop_caches
# free -m
total used free shared buffers cached
Mem: 15993 2057 13935 0 0 47
-/+ buffers/cache: 2009 13984
Swap: 8236 0 8236