cron定時任務+釋放記憶體指令碼釋放伺服器快取
我經常發現伺服器會變得很卡,經過檢查發現伺服器free的記憶體會越來越小,大多數記憶體都被快取使用了。所以我寫了一個自動執行的指令碼來定時釋放記憶體。以下是基於centos 7.3作業系統。
1.釋放記憶體指令碼:
在根目錄建立releasememory.sh,然後把下面的程式碼貼進去,儲存。
該指令碼作用是:查詢free記憶體比例,少於20%就清空快取。
vi releasememory.sh
#!/bin/bash
mem_total=`free -m | awk 'NR==2' | awk '{print $2}'`
mem_free=`free -m | awk 'NR==2' | awk '{print $4}'`
mem_used=`free -m | grep Mem | awk '{print $3}'`
echo "===========================" >> /var/log/mem.log
date >> /var/log/mem.log
echo "Memory usage | [Total:${mem_total}MB][Free:${mem_free}MB][Used:${mem_used}MB]" >> /var/log/mem.log
if (($mem_used != 0)); then
mem_per=0`echo "scale=2;$mem_free/$mem_total" | bc`
DATA="$(date -d "today" +"%Y-%m-%d-%H-%M") free percent is : $mem_per"
echo $DATA >>/var/log/mem_detect.log
mem_warn=0.20
mem_now=`expr $mem_per \> $mem_warn`
if (($mem_now == 0)); then
sync
echo 3 > /proc/sys/vm/drop_caches
echo "OK" >> /var/log/mem.log
fi
fi
2. 給指令碼執行許可權
#chmod +x releasememory.sh
3. 把指令碼新增到系統定時任務:
以下命令是把定時任務放到cron配置檔案裡,作用是每天1:00執行releasememory.sh指令碼。
#echo "0 1 * * * root /root/releasememory.sh" >> /etc/crontab
4.重新載入cron配置和重啟cron服務
#service crond reload
#service crond restart
5.檢視log:
/var/log/mem.log
/var/log/mem_detect.log