Linux 手動釋放記憶體 Cache Memory

Linux 預設的記憶體管理會自動釋放記憶體的 cache memory。跟 Windows 不同, Linux 開啟一段時間後, 即使關閉了一些 process, 用 top 或 free 指令查看記憶體的使用狀況時, 都是只剩下不足 1% 的可用空間, 實際上只是 cache memory 佔用了記憶體空間, 而 Kernel 會在 process 需要使用記憶體時, 自動釋放 cache 所佔用的記憶體。

其實這樣系統一直運行並沒有問題, 但如果想手動釋放 cache memory, 可以通過修改檔案 /proc/sys/vm/drop_caches 實現, 系統預設值是 0 , 即不會強制釋放:

# cat /proc/sys/vm/drop_caches
0

除了預設的 0 設定外, 分別可以設定成 1, 2 及 3, 它們的意思是:

設定成 1, 釋放 page cache:

# sh -c “sync; echo 3 > /proc/sys/vm/drop_caches”

設定成 2, 釋放 dentries 與 inodes:

# sh -c “sync; echo 3 > /proc/sys/vm/drop_caches”

設定成 3, 釋放所有 cache, 包括 pagecache、dentries 及 inodes:

# sh -c “sync; echo 3 > /proc/sys/vm/drop_caches”

上面的做法可以通過手動輸入指令釋放記憶體, 如果想定期自動釋放, 可以建立一個 shell script, 配合 crontab 實現。

首先建立一個 shell script, 以下假設 shell script 名為 cacheclear.sh, 並放在 /root/ 目錄下, 用作自動釋放記憶體, 內容如下:

儲存後離開編輯器, 將檔案加入可執行權限:

# chmod +x cacheclear.sh

加入 crontab:

# crontab -e

加入以下一行在最後:

儲存後, crontab 就會每個小時 0 分自動釋放記憶體。




Leave a Reply