zoukankan      html  css  js  c++  java
  • 第三十二节 定时器

    在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

    如侵权请联删

  • 相关阅读:
    哎,这两天的心情,真是太差了
    昨天跌停价冲进去,今天继续跌停
    好几天没有干正事了,是否已经堕落了?
    继续通宵加班
    Map集合的遍历方式
    List,Set,Map,propertes注入方式
    java异常捕获以及处理
    List、Set、Map、数组互转
    Java并发编程:深入剖析ThreadLocal
    Exceotion与RuntimeException的区别
  • 原文地址:https://www.cnblogs.com/kogmaw/p/12410374.html
Copyright © 2011-2022 走看看