在CentOS6.9上Shell腳本定時釋放內存cache


一、寫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 。

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM