在CentOS6.9上Shell脚本定时释放内存cache

一、写Shell脚本

mkdir -p /var/script/

vim /var/script/freemem.sh

写入以下Shell脚本:

#!/bin/bash

# 当前已使用的内存大小 

used=`free -m | awk 'NR==2' | awk '{print $3}'`

# 当前剩余的内存大小

free=`free -m | awk 'NR==2' | awk '{print $4}'`

 

echo "===========================" >> /var/log/mem.log

date >> /var/log/mem.log

echo "Memory usage | [Use:${used}MB][Free:${free}MB]" >> /var/log/mem.log

 

#if [ $free -le 100 ] ; 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/log/mem.log

#else

#  echo "Not required" >> /var/log/mem.log

#fi

说明:

其中/proc/sys/vm/drop_caches中的值有4个,分别为0-3:

0 – 不释放

1 – 释放页缓存

2 – 释放dentries和inodes

3 – 释放所有缓存

二、赋予Shell脚本可执行权限。

 chmod u+x freemem.sh

下面说一下怎么使用定时:

(1)Crontab 介绍

crontab命令的功能是在一定的时间间隔调度一些命令的执行。

(2)查看/etc/crontab文件

vim  /etc/crontab

在crontab中增加定时任务

(3)文件/etc/crontab中每行任务的描述格式如下:

minute hour day month dayofweek command

minute - 从0到59的整数

hour - 从0到23的整数

day - 从1到31的整数 (必须是指定月份的有效日期)

month - 从1到12的整数 (或如Jan或Feb简写的月份)

dayofweek - 从0到7的整数,0或7用来描述周日 (或用Sun或Mon简写来表示)

command - 需要执行的命令(可用as ls /proc >> /tmp/proc或 执行自定义脚本的命令)

 

如果是每五分钟执行一次可改为:

*/5 * * * *  /var/script/freemem.sh

(4)crontab服务的启动关闭

sbin/service crond start   # 启动服务

/sbin/service crond stop   # 关闭服务

/sbin/service crond restart   # 重启服务

/sbin/service crond reload    # 重新载入配置

三、将脚本添加到crond任务,定时执行,每天0点释放一次内存,这个时间可以根据自己需要修改设置。

echo "00 00 * * * root /var/script/freemem.sh" >> /etc/crondtab

这种用脚本自动释放缓存的方法在生产环境中是不建议采用的,要是内存不够用,最好还是去找找其他的原因,比如程序设置是否合理,是否突发访问量很大,或者程序设计不合理导致内存溢出等,毕竟操作系统本身设计会考虑各方面的问题,强制腾出cache的大小,可能只是把问题给暂时屏蔽了,不利于判断问题的所在。

猜你喜欢

转载自www.cnblogs.com/opsprobe/p/10785568.html