CentOS中定时释放内存的Shell脚本¶
在设置报警规则后每天几乎都会收到内存过高报警,想着就使用Shell脚本来释放内存。
一、脚本及原理¶
脚本:
我在/mnt
下创建了free_memory.sh
我的解释器在/usr/bin下,所以脚本如下:
原理:
向 /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
脚本
参数:
-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脚本就完成了。