CentOS/Linux内存占用大,用Shell脚本自动定时清除/释放内存

  • 发表于
  • Linux

以下情况可能造成Linux内存占用过高

  • 服务配置存在直接分配错误,或隐性分配不合理等
  • 程序有BUG
  • 被恶意流量数据包攻击
  • 资源配置与流量不科学
centos

都会造成服务器内存占用过高,出现访问延迟高,速度慢甚至挂机的问题。想要根除这个问题最科学的方法:

  1. 使用top等命令找出内存占用高的进程
  2. 分析原因:程序BUG/服务配置不合理或错误
  3. 根据原因进行针对性修复优化

但今天我们只讲通过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