第三十二节 定时器 在CentOS6.9上Shell脚本定时释放内存cache

在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

如侵权请联删

一、写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

如侵权请联删

猜你喜欢

转载自www.cnblogs.com/kogmaw/p/12410374.html