Linux中如何通过设置定时任务清除内存缓存占用过大问题

Linux 内存缓存占用过大,一直是非常头疼的问题,

在Centos或ubuntu等linux操作系统中,如何设置定时任务清除buff/cache的脚本,从而提高效率,减小成本。

Linux系统buff/cache 中缓存数据占用内存过高,定时清理buff/cache ,释放系统内存

root权限创建脚本文件:

通过 touch命令 创建一个cleanCache.sh文件,通过vim 来编辑这个脚本文件

touch cleanCache.sh && vim cleanCache.sh

linux脚本代码如下:

#!/bin/bash
Mem=$(free -m | awk 'NR==2' | awk '{print $4}')
echo $Mem
if [ $Mem -gt 2048 ];
     then
echo "Service memory capacity is normal!" > /dev/null
     else
sync
echo 1 > /proc/sys/vm/drop_caches
echo 2 > /proc/sys/vm/drop_caches
echo 3 > /proc/sys/vm/drop_caches
sync
fi

上面的脚本的意思是,如果内存小于2G,就开始清除buff/cache ,释放系统内存

手动解决请点击 Linux buff/cache 释放过高内存解决方案

清除缓存的核心三条语句如下:

echo 1 > /proc/sys/vm/drop_caches

echo 2 > /proc/sys/vm/drop_caches

echo 3 > /proc/sys/vm/drop_caches

#默认是0,不清除缓冲区缓存和页面缓存

#可用值 0 到 3

由于手动操作太累,万一忘了,内存过高,出现宕机的现象,所以用定时任务。

crontab -e

设置定时任务,每隔30分钟时运行一次

*/30 * * * * sh /opt/cleanCache.sh

crontab定时任务是否设置成功呢?

[root@iz8vbbxoyfcgyzkxcspg04z opt]# crontab -l
*/30 * * * * sh /opt/cleanCache.sh

保证crond启动以及开机自启

systemctl start crond.service
systemctl enable crond.service

如何查看定时任务是否被执行

cat /var/log/cron | grep cleanCache

[root@iz8vbbxoyfcgyzkxcspg04z opt]# cat /var/log/cron | grep cleanCache
Nov 16 20:00:01 iz8vbbxoyfcgyzkxcspg04z CROND[23587]: (root) CMD (sh /opt/cleanCache.sh)
Nov 16 20:30:01 iz8vbbxoyfcgyzkxcspg04z CROND[23639]: (root) CMD (sh /opt/cleanCache.sh)
Nov 16 21:00:01 iz8vbbxoyfcgyzkxcspg04z CROND[23825]: (root) CMD (sh /opt/cleanCache.sh)
Nov 16 21:30:01 iz8vbbxoyfcgyzkxcspg04z CROND[23918]: (root) CMD (sh /opt/cleanCache.sh)
Nov 16 22:00:01 iz8vbbxoyfcgyzkxcspg04z CROND[24035]: (root) CMD (sh /opt/cleanCache.sh)

从上面的提示信息,可以看出每隔30分钟执行一次。