Linux指定定時指令碼清理快取、檢視記憶體使用情況
轉載地址,部分補充修改。
Linux命令之sync - 強制將記憶體中的檔案緩衝內容寫到磁碟。
Linux核心為了達到最佳的磁碟操作效率,會把需要寫入到磁碟的資料現在記憶體中快取起來,在合適的時候才真正寫入到磁碟中,這在絕大多數情況都是沒有任何問題的,而且提高了系統的效率,但是如果系統當機、掉電,就會有些檔案內容不會儲存下來。在Linux系統關機或者重啟時,會自動把緩衝區的內容自動同步到磁碟中。我們也可以手工去執行sync命令,強制將記憶體中的檔案緩衝內容寫到磁碟,這個命令是通過呼叫sync系統呼叫來實現的。
常用方式 : sync —— 強制將記憶體中的檔案緩衝內容寫到磁碟。
指令碼例子內容如下:
crontab -e
*/1 * * * * /root/drop_cacheFile.sh >>/root/cronDropCache.log
#/bin/bash
mt=`free | tr [:blank:] \\\n | grep [0-9] | sed -n '1p'`
mu=`free | tr [:blank:] \\\n | grep [0-9] | sed -n '2p'`
mf=`free | tr [:blank:] \\\n | grep [0-9] | sed -n '3p'`
st=`free | tr [:blank:] \\\n | grep [0-9] | sed -n '9p'`
su=`free | tr [:blank:] \\\n | grep [0-9] | sed -n '10p'`
sf=`free | tr [:blank:] \\\n | grep [0-9] | sed -n '11p'`
t=`expr $mt + $st`
u=`expr $mu + $su`
R=`expr $mu \* 100 / $mt`
nowdata=`date "+%Y-%m-%d %H:%M:%S"`
echo "========"$nowdata"執行我清理記憶體啦====================="
echo "當前記憶體使用率為: $R%"
ttotle=`free -m |awk '{if(NR>1 && NR<3) {print $2}}'`
uused=`free -m |awk '{if(NR>1 && NR<3) {print $3}}'`
ffree=`free -m |awk '{if(NR>1 && NR<3) {print $4}}'`
echo "目前的記憶體情況M單位:總記憶體:"$ttotle"M--使用了:"$uused"M--剩餘:"$ffree"M"
echo 3 > /proc/sys/vm/drop_caches
echo "記憶體清理結束"
在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 – 釋放所有快取
1.清理前記憶體使用情況
free -m
2.開始清理
echo 1 > /proc/sys/vm/drop_caches
3.清理後記憶體使用情況
free -m
4.完成! 檢視記憶體條數命令:
dmidecode | grep -A16 "Memory Device$"
定時指令碼新增執行任務可參考原文:http://blog.csdn.net/liqi_q/article/details/78044373