如何爲linux釋放內存和緩存



如何爲linux釋放內存和緩存

在Linux系統下,我們一般不需要去釋放內存,因爲系統已經將內存管理的很好。但是凡事也有例外,有的時候內存會被緩存佔用掉,導致系統使用SWAP空間影響性能,此時就需要執行釋放內存(清理緩存)的操作了。

Linux系統的緩存機制是相當先進的,他會針對dentry(用於VFS,加速文件路徑名到inode的轉換)、Buffer Cache(針對磁盤塊的讀寫)和Page Cache(針對文件inode的讀寫)進行緩存操作。但是在進行了大量文件操作之後,緩存會把內存資源基本用光。但實際上我們文件操作已經完成,這部分緩存已經用不到了。這個時候,我們難道只能眼睜睜的看着緩存把內存空間佔據掉麼?

所以,我們還是有必要來手動進行Linux下釋放內存的操作,其實也就是釋放緩存的操作了。

要達到釋放緩存的目的,我們首先需要了解下關鍵的配置文件/proc/sys/vm/drop_caches。這個文件中記錄了緩存釋放的參數,默認值爲0,也就是不釋放緩存。他的值可以爲0~3之間的任意數字,代表着不同的含義:

0 – 不釋放
1 – 釋放頁緩存
2 – 釋放dentries和inodes
3 – 釋放所有緩存

知道了參數後,我們就可以根據我們的需要,使用下面的指令來進行操作。

首先我們需要使用sync指令,將所有未寫的系統緩衝區寫到磁盤中,包含已修改的 i-node、已延遲的塊 I/O 和讀寫映射文件。否則在釋放緩存的過程中,可能會丟失未保存的文件。


 

#sync


 

接下來,我們需要將需要的參數寫進/proc/sys/vm/drop_caches文件中,比如我們需要釋放所有緩存,就輸入下面的命令:


 

#echo 3 > /proc/sys/vm/drop_caches


 

此指令輸入後會立即生效,可以查詢現在的可用內存明顯的變多了。

要查詢當前緩存釋放的參數,可以輸入下面的指令:


 

#cat /proc/sys/vm/drop_caches

#free -m


 

對於清除swap,只有先關閉swap了,用:

#swapoff -a

而後啓用swap,因爲只是清除,不是說不要用swap的嘛 :

#swapon -a

 



 http://blog.sina.com.cn/s/blog_539d6e0c0100ys3o.html


 

Linux 自動釋放內存腳本
發表於119 天前 ? 技術文章 ? 暫無評論

腳本下載地址:Cached
腳本內容:
#! /bin/bash
# cache釋放:
# To free pagecache:
sync
sync
#echo 1 > /proc/sys/vm/drop_caches
# To free dentries and inodes:
#echo 2 > /proc/sys/vm/drop_caches
# To free pagecache, dentries and inodes:
echo 3 > /proc/sys/vm/drop_caches
# 說明,釋放前最好sync一下,防止丟數據。
利用系統crontab實現每天自動運行:
crontab -e
輸入以下內容:
00 00 * * * /root/Cached.sh
每天0點釋放一次內存,這個時間可以根據自己需要自行設置,我的服務器情況是每天自動釋放一次就OK了
在設置這個腳本的時候,發生了一系列的問題
在測試運行./Cached.sh時提示錯誤:Permission denied 權限的問題
解決方法:
chmod +x .Cached.sh

chmod 777 Cached.sh
接着又出現錯誤提示:/bin/bash^M: bad interpreter: No such file or directory
這是因爲在windows下編輯的.sh文件編碼格式和linux下不一樣,轉換一下編碼格式即可:
dos2unix Cached.sh

http://blog.sinorain.com/archives/157

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章