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
除了預設的 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/ 目錄下, 用作自動釋放記憶體, 內容如下:
|
1 2 3 |
#!/bin/sh sh -c "sync; echo 3 > /proc/sys/vm/drop_caches" |
儲存後離開編輯器, 將檔案加入可執行權限:
# chmod +x cacheclear.sh
加入 crontab:
# crontab -e
加入以下一行在最後:
|
1 |
0 * * * * /root/cacheclear.sh |
儲存後, crontab 就會每個小時 0 分自動釋放記憶體。