一、寫Shell腳本
mkdir -p /var/script/
vim /var/script/freemem.sh
寫入以下Shell腳本:
#!/bin/bash
# 當前已使用的內存大小
used=`free -m | awk 'NR==2' | awk '{print $3}'`
# 當前剩余的內存大小
free=`free -m | awk 'NR==2' | awk '{print $4}'`
echo "===========================" >> /var/log/mem.log
date >> /var/log/mem.log
echo "Memory Usage | [Use:${used}MB][Free:${free}MB]" >> /var/log/mem.log
#if [ $free -le 100 ] ; then
sync && echo 1 > /proc/sys/vm/drop_caches
sync && echo 2 > /proc/sys/vm/drop_caches
sync && echo 3 > /proc/sys/vm/drop_caches
echo "OK" >> /var/log/mem.log
#else
# echo "Not required" >> /var/log/mem.log
#fi
說明:
其中/proc/sys/vm/drop_caches中的值有4個,分別為0-3:
0 – 不釋放
1 – 釋放頁緩存
2 – 釋放dentries和inodes
3 – 釋放所有緩存
二、賦予Shell腳本可執行權限
chmod u+x freemem.sh
三、增加定時任務
(1)crontab 介紹
crontab命令的功能是在一定的時間間隔調度一些命令的執行。
定時有兩種方法:/etc/crontab 文件和 crontab -e 命令,(兩者有點區別)下面使用 /etc/crontab 文件
(2)查看/etc/crontab文件
vim /etc/crontab
(3)文件 /etc/crontab 中每列任務的描述格式如下:
minute —> 分鍾,從0到59的整數
hour —> 小時,從0到23的整數
day of month —> 日,從1到31的整數
month —> 月,從1到12的整數 (或如jan,feb簡寫的月份)
day of week —> 星期,從0到7的整數,0或7都表示星期天,1表示星期一,依次類推(或用sun,mon簡寫來表示)
user-name —> 執行命令的用戶
command to be executed —> 需要執行的命令
(4)定時執行 freemem.sh 腳本,每天0點釋放一次內存,這個時間可以根據自己需要修改設置
echo "00 00 * * * root /var/script/freemem.sh" >> /etc/crontab
這種用腳本自動釋放緩存的方法在生產環境中是不建議采用的,要是內存不夠用,最好還是去找找其他的原因,比如程序設置是否合理,是否突發訪問量很大,或者程序設計不合理導致內存溢出等,畢竟操作系統本身設計會考慮各方面的問題,強制騰出cache的大小,可能只是把問題給暫時屏蔽了,不利於判斷問題的所在。
(5)需要注意crontab服務是否啟動,如果沒有,務必啟動,相關命令如下:
service crond start # 啟動服務
service crond stop # 關閉服務
service crond status # 服務狀態
service crond restart # 重啟服務
service crond reload # 重新載入配置
chkconfig crond on # 加入開機自啟動
chkconfig --list |grep crond # 查看是否開啟自啟動
四、這里順便再記錄下一些輔助的字符,常用的一些如下表格:
輔助字符 | 代表意義 |
*(星號) | 代表任何時刻都接受的意思!舉例來說,00 00 * * * user command,日、月、周都是 * , 就代表不論何月、何日的禮拜幾的 00:00 都運行后續命令的意思。 |
,(逗號) | 代表分隔時段的意思。舉例來說,一個命令需要在每天的 3:00 和 6:00 時分別執行一次,如下: |
0 3,6 * * * user command |
|
-(減號) | 代表一段時間范圍內,舉例來說, 8 點到 12 點之間的每小時的 20 分都需要執行一次某個命令,如下: |
20 8-12 * * * user command |
|
第二欄是 8-12,代表 8,9,10,11,12 點都會執行的意思。 |
|
/n(斜線) | n 代表數字,即每隔 n 單位間隔的意思,例如每五分鍾進行一次,則: |
*/5 * * * * user command |
|
用 * 與 /5 來搭配,也可以寫成 0-59/5 。 |