CentOS/Linux內存占用大,用Shell腳本自動定時清除/釋放內存
來自:互聯網 時間:2020-03-22 閱讀:114
以下情況可能造成Linux內存占用過高
服務配置存在直接分配錯誤,或隱性分配不合理等
程序有BUG
被惡意流量數據包攻擊
資源配置與流量不科學
CentOS/Linux內存占用大,用Shell腳本自動定時清除/釋放內存
都會造成服務器內存占用過高,出現訪問延遲高,速度慢甚至掛機的問題。想要根除這個問題最科學的方法:
使用top等命令找出內存占用高的進程
分析原因:程序BUG/服務配置不合理或錯誤
根據原因進行針對性修復優化
但今天我們只講通過shell腳本CentOS/Linux自動定時清除/釋放內存的方法,此方法屬於加法優化,在上面的基礎上進行優化補充。
CentOS/Linux自動定時清除/釋放內存
編寫 shell 文件:dropcache_min.sh:簡約
#!/bin/bash
#每兩小時清除一次緩存
echo "開始清除緩存"
sync;sync;sync #寫入硬盤,防止數據丟失
sleep 10#延遲10秒
echo 3>/proc/sys/vm/drop_caches
編寫 shell 文件:dropcache.sh:條件判斷
#!/bin/bash
used=`free -m | awk 'NR==2' | awk '{print $3}'`
free=`free -m | awk 'NR==2' | awk '{print $4}'`
echo "===========================" >> /var/spool/cron/dropcache.log
date >> /var/spool/cron/dropcache.log
echo "Memory usage | [Use:${used}MB][Free:${free}MB]" >> /var/spool/cron/dropcache.log
#如果可用內存小於5.5G則進行清理釋放
if [ $free -le 5500 ] ; 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/spool/cron/delcache.log
else
echo "Not required" >> /var/spool/cron/dropcache.log
fi
保存腳本並賦權限,
$ chmod +x dropcache.sh
# 測試權限
$ ./dropcache.sh
用root用戶創建定時任務
$ echo "*/30 * * * * root /var/spool/cron/dropcache.sh" >> /etc/crondtab
每30分鍾自動運行。
確保crond啟動以及開機自啟
相關命令# 開機自啟 $ systemctl enable crond.service service crond start //啟動服務 service crond stop //關閉服務 service crond restart //重啟服務 service crond reload //重新載入配置 service crond status //查看服務狀態 # 查看定時任務是否被執行 $ crontab -l