手動清除Linux記憶體快取

手動清除Linux記憶體快取

這篇介紹手動清除Linux記憶體快取。

前言

1
2
3
4
5
6
最近在Linux上執行將log打包成.tar.gz時
出現memory over 80%告警
--------------------------------------
Linux 中提供了 free 指令可以觀察系統中記憶體的使用情況,
觀察後發現跑完一次 .tar.gz 後被快取的記憶體多了不少,
且這些 cache 並不會隨著 process 的結束而馬上被清理掉。

指令

1
2
3
4
5
6
7
8
9
10
Linux 有提供一個 proc file system 介面 /proc/sys/vm/drop_caches 可以強制 kernel 清理快取。
若有這樣的需求,我們只需要對這個 file 寫入 1~3 這三種控制碼其中一種,
對應的記憶體快取種類便會被強制清理。
--
若寫入 1 會清除 pagecache:
# echo 1 > /proc/sys/vm/drop_caches
若寫入 2 會清除 dentries 與 inodes:
# echo 2 > /proc/sys/vm/drop_caches
若寫入 3 則有等同於 1+2 的效果,會清除 pagecache、dentries 及 inodes:
# echo 3 > /proc/sys/vm/drop_caches