CentOS/Linux内存占用大,用Shell脚本自动定时清除/释放内存
- 发表于
- Linux
以下情况可能造成Linux内存占用过高
- 服务配置存在直接分配错误,或隐性分配不合理等
- 程序有BUG
- 被恶意流量数据包攻击
- 资源配置与流量不科学
都会造成服务器内存占用过高,出现访问延迟高,速度慢甚至挂机的问题。想要根除这个问题最科学的方法:
- 使用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
原文连接:CentOS/Linux内存占用大,用Shell脚本自动定时清除/释放内存
所有媒体,可在保留署名、
原文连接
的情况下转载,若非则不得使用我方内容。