Linux服务器内存(cached)释放脚本

8 篇文章 2 订阅

上线很久的一个项目突然监控预警系统报警,提示内存达警戒值(使用率达到90%以上预警系统会报警),使用free -m查看,可用内存少的可怜,重启了Java应用,也仅仅释放了2个G的内存,而系统内存是8G,也就是说有其他应用占着。我们都知道,如果Cached的值过大,那么就会导致系统没有可以再分配的内存空间。而Cached是用来缓存文件的,经常读写的文件会被缓存到Cached中,可以增加读写效率,该功能是Linux系统内核提供的(2.6.16以后的核心版本才提供)。由于临近年底,各种数据量突然加大,项目读写频率骤增,这就导致内存不能及时释放,重启服务也达不到目的,那么,有什么办法能够及时清理cached内存呢?我们在测试环境模拟一下这个过程:

清理Cached内存主要用到以下命令:

sync

echo 1 > /proc/sys/vm/drop_caches
echo 2 > /proc/sys/vm/drop_caches
echo 3 > /proc/sys/vm/drop_caches

上述提示权限不足,那么我们切换到root,执行命令,看下有效无效:

注:一定要先执行sync命令(sync命令能够将所有未写的系统缓冲区写到磁盘中)

可以看到,执行命令以后,Cached明显降低,那么我们总不能每次都手工执行命令吧,所以我们可以写一个shell脚本,用于清理Cached内存,步骤如下:

在root目录下创建一个freemem.sh的脚本:touch freemem.sh,然后vi freemem.sh,编辑内容如下:

#!/bin/bash
used=`free -m | awk 'NR==2' | awk '{print $3}'`
free=`free -m | awk 'NR==2' | awk '{print $4}'`

echo "==========================="
echo "内存使用情况 | [使用了:${used}MB][剩余:${free}MB]"

if [ $free -le 200 ] ; 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 "清理Cached成功"
else
                echo "不需要清理"
fi
exit

如果觉得手动执行麻烦,那么加入Linux Crontab 定时任务,定时执行即可。

 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值