在设置报警规则后每天几乎都会收到内存过高报警,想着就使用Shell脚本来释放内存。

一、脚本及原理

脚本:

我在/mnt下创建了free_memory.sh

我的解释器在/usr/bin下,所以脚本如下:

#! /usr/bin/bash
sync
echo 3 > /proc/sys/vm/drop_caches
echo "done!"

原理:

/proc/sys/vm/drop_caches文件中写入数值可以使内核释放page cache,dentries和inodes缓存所占的内存。

只释放pagecache:

echo 1 > /proc/sys/vm/drop_caches

只释放dentries和inodes缓存:

echo 2 > /proc/sys/vm/drop_caches

释放pagecache、dentries和inodes缓存:

echo 3 > /proc/sys/vm/drop_caches

这个操作不是破坏性操作,脏的对象(比如脏页)不会被释放,因此要首先运行sync命令。

二、定时任务的参数及设置

设置:

使用crontab -e以当前用户的身份创建一个定时任务,该定时任务只对当前用户有效。

crontab -e

写入:

04 00 * * * /mnt/freememory.sh

前面的参数是minute hour day month dayofweek,后面接脚本位置,意思是每日4时执行mnt目录下的freememory.sh脚本

参数:

crontab [-u user] file
crontab [-u user]{-l|-r|-e}

-u user:用来设定某个用户的crontab服务,例如,“-u ixdba”表示设定ixdba用户的crontab服务,此参数一般有root用户来运行。

file:file是命令文件的名字,表示将file做为crontab的任务列表文件并载入crontab。如果在命令行中没有指定这个文件,crontab命令将接受标准输入(键盘)上键入的命令,并将它们载入crontab。

-e:编辑某个用户的crontab文件内容。如果不指定用户,则表示编辑当前用户的crontab文件。

-l:显示某个用户的crontab文件内容,如果不指定用户,则表示显示当前用户的crontab文件内容。

-r:从/var/spool/cron目录中删除某个用户的crontab文件,如果不指定用户,则默认删除当前用户的crontab文件。

-i:在删除用户的crontab文件时给确认提示。

至此,CentOS中定时释放内存的Shell脚本就完成了。

标签: CentOS, 内存, Shell

分类: Linux, 学点技术

添加新评论