在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命令的功能是在一定的时间间隔调度一些命令的执行。
定时有两种方法:/etc/crontab 文件和 crontab -e 命令,(两者有点区别)下面使用 /etc/crontab 文件
(2)查看/etc/crontab文件
vim /etc/crontab
(3)文件 /etc/crontab 中每列任务的描述格式如下:
minute —> 分钟,从0到59的整数
hour —> 小时,从0到23的整数
day of month —> 日,从1到31的整数
month —> 月,从1到12的整数 (或如jan,feb简写的月份)
day of week —> 星期,从0到7的整数,0或7都表示星期天,1表示星期一,依次类推(或用sun,mon简写来表示)
user-name —> 执行命令的用户
command to be executed —> 需要执行的命令
(4)定时执行 freemem.sh 脚本,每天0点释放一次内存,这个时间可以根据自己需要修改设置
echo "00 00 * * * root /var/script/freemem.sh" >> /etc/crontab
这种用脚本自动释放缓存的方法在生产环境中是不建议采用的,要是内存不够用,最好还是去找找其他的原因,比如程序设置是否合理,是否突发访问量很大,或者程序设计不合理导致内存溢出等,毕竟操作系统本身设计会考虑各方面的问题,强制腾出cache的大小,可能只是把问题给暂时屏蔽了,不利于判断问题的所在。
(5)需要注意crontab服务是否启动,如果没有,务必启动,相关命令如下:
service crond start # 启动服务
service crond stop # 关闭服务
service crond status # 服务状态
service crond restart # 重启服务
service crond reload # 重新载入配置
chkconfig crond on # 加入开机自启动
chkconfig --list |grep crond # 查看是否开启自启动
四、这里顺便再记录下一些辅助的字符,常用的一些如下表格:
辅助字符 | 代表意义 |
*(星号) |
代表任何时刻都接受的意思!举例来说,00 00 * * * user command,日、月、周都是 * , 就代表不论何月、何日的礼拜几的 00:00 都运行后续命令的意思。 |
,(逗号) |
代表分隔时段的意思。举例来说,一个命令需要在每天的 3:00 和 6:00 时分别执行一次,如下: |
0 3,6 * * * user command |
|
-(减号) |
代表一段时间范围内,举例来说, 8 点到 12 点之间的每小时的 20 分都需要执行一次某个命令,如下: |
20 8-12 * * * user command |
|
第二栏是 8-12,代表 8,9,10,11,12 点都会执行的意思。 |
|
/n(斜线) |
n 代表数字,即每隔 n 单位间隔的意思,例如每五分钟进行一次,则: |
*/5 * * * * user command |
|
用 * 与 /5 来搭配,也可以写成 0-59/5 。 |
原文链接 https://www.cnblogs.com/opsprobe/p/10785568.html
如侵权请联删