以下情况可能造成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