使用Linux服务器的用户应该都知道,Linux在使用的时候,可用内存会随着时间慢慢的变小,最终可能到80%-90%,这个时候就需要我们去人工干预,来进行魂村的释放。

本文将使用Linux的Cron定时任务结合Shell脚本来实现自动化的内存释放。

基本流程

1、编写Shell脚本,检测当前服务器的内存使用率,如果达到了我们预设的值则强制释放内存。

2、将编写好的Shel脚本,添加到Cron定时任务列表中,设置运行周期。

释放缓存的Shell脚本

如果在终端中我们通常是使用下面的命令来释放内存

sync

echo 3 >> /proc/sys/vm/drop_caches

1

2

sync

echo3>>/proc/sys/vm/drop_caches

sync命令用于强制被改变的内容立刻写入磁盘,更新超块信息

echo 3 >> /proc/sys/vm/drop_caches 命令是强制释放缓存的命令

下面给出shell脚本freeMemory.sh

#!/bin/sh

#内存总量

total=$( free -m | grep Mem | awk '{print $2}')

#已使用内存

used=$( free -m | grep Mem | awk '{print $3}')

#内存使用率

rate=$(($used*100/$total))

time=date

echo "############$(date)###############"

#$1 is max Mem

if [ $rate -gt $1 ]

then

echo "rate=$rate freeMemory start!"

sync

echo 3 >> /proc/sys/vm/drop_caches

echo "FreeMemory Success!"

else

echo "rate=$rate Memory is normal"

fi

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

#!/bin/sh

#内存总量

total=$(free-m|grepMem|awk'{print $2}')

#已使用内存

used=$(free-m|grepMem|awk'{print $3}')

#内存使用率

rate=$(($used*100/$total))

time=date

echo"############$(date)###############"

#$1 is max Mem

if[$rate-gt$1]

then

echo"rate=$rate    freeMemory start!"

sync

echo3>>/proc/sys/vm/drop_caches

echo"FreeMemory Success!"

else

echo"rate=$rate  Memory is normal"

fi

脚本中获取并计算了当前内存的使用率,在执行脚本的时候需要加一个参数,也就是我们设置的最大内存使用率,当超过这个值时便会执行释放内存的命令。

ok我们的shell脚本保存在了/root/freeMemory.sh

添加定时任务

在定时任务这我们用到了cron这个定时工具,我们这里就不详细解释了,下面只说用法,后面我会写一篇专门的文章来介绍该定时工具。

在终端中执行下面的命令,来查看当前的定时任务:

[root@kTWO ~]# crontab -l

#secu-tcs-agent monitor, install at Sat Mar 25 10:00:39 CST 2017

* * * * * /usr/local/sa/agent/secu-tcs-agent-mon-safe.sh /usr/local/sa/agent > /dev/null 2>&1

*/1 * * * * /usr/local/qcloud/stargate/admin/start.sh > /dev/null 2>&1 &

*/20 * * * * /usr/sbin/ntpdate ntpupdate.tencentyun.com >/dev/null &

1

2

3

4

5

[root@kTWO~]# crontab -l

#secu-tcs-agent monitor, install at Sat Mar 25 10:00:39 CST 2017

*****/usr/local/sa/agent/secu-tcs-agent-mon-safe.sh/usr/local/sa/agent>/dev/null2>&1

*/1****/usr/local/qcloud/stargate/admin/start.sh>/dev/null2>&1&

*/20****/usr/sbin/ntpdatentpupdate.tencentyun.com>/dev/null&

看上面的格式,一共是6列,前五列是时间周期,第6列是我们要执行的命令。前五列的解释如下:

# Example of job definition:

# .---------------- minute (0 - 59)    分钟

# | .------------- hour (0 - 23)          小时

# | | .---------- day of month (1 - 31)     一个月的某天

# | | | .------- month (1 - 12) OR jan,feb,mar,apr ...    月份

# | | | | .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat    一周的某一天

# | | | | |

# * * * * * user-name command to be executed

1

2

3

4

5

6

7

8

# Example of job definition:

# .---------------- minute (0 - 59)    分钟

# | .------------- hour (0 - 23)          小时

# | | .---------- day of month (1 - 31)     一个月的某天

# | | | .------- month (1 - 12) OR jan,feb,mar,apr ...    月份

# | | | | .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat    一周的某一天

# | | | | |

# * * * * * user-name command to be executed

根据上面时间的格式规则我们可以设置我们自己的定时周期,这里我设置了每天的23点执行一个脚本,步骤如下:

1、执行命令crontab -e打开编辑定时配置文件

2、在文件的最后面添加下面的命令:

0 23 * * * /root/freeMemory.sh 70 >> /root/freeMemoryLog.txt

1

023***/root/freeMemory.sh70>>/root/freeMemoryLog.txt

上面我们设置了每天的23点执行命令我们的脚本,参数设置70,就是当检测到内存使用率大于70的时候回执行释放缓存命令,后面的>>是重定向命令吗,会将脚本的执行结果写进文件freeMemoryLog.txt中,便于我们查看。

cron是不需要重新启动的,文件保存后会自动生效。

结束语

脚本写的比较简单,大家可以自由发挥,编写出强大的脚本。

cron的具体参数的介绍本文未讲,后面的文章会单独介绍。

释放linux缓存文件命令,Linux定时释放缓存Shell脚本实现自动化运维 | kTWO-个人博客...相关推荐

  1. linux 【完结篇】第六章 shell编程及自动化运维--三剑客

    linux 第六章 shell编程及自动化运维–三剑客 一.正则表达式 1.前言 名词解释: 正则表达式是一种字符模式,用于在查找过程中匹配指定的字符.在大多数程序里,正则表达式都被置于2个正斜杠之间 ...

  2. linux echo 变量 字符串,echo命令 – 输出字符串或提取Shell变量的值 – 运维那些事...

    echo命令用于在终端设备上输出字符串或变量提取后的值,这是在Linux系统中最常用的几个命令之一,但操作却非常简单. 人们一般使用在变量前加上$符号的方式提取出变量的值,例如:$PATH,然后再用e ...

  3. linux用命令开触摸板,使用shell脚本实现控制触摸板关闭和开启(Ubuntu Linux、Deepin Linux系列)...

    设备:小米air12.5 环境:Deepin Linux 15.9 问题:触摸板快捷键在linux系统下失效,时有误触. 其他设备尚未做测试,料想应该是通用. 解决过程1: 使用xinput命令找到设 ...

  4. Linux Shell编程及自动化运维实现 变量

    SHELL 前言 什么是shell shell壳命令解释器,一种应用程序. shell语言的特点SHELL语言是指UNIX操作系统的命令语言,同时又是该命令语言的解释程序的简称.Shell本身是一个用 ...

  5. linux unset命令,Linux unset命令

    Linux unset命令 Linux unset命令用于删除变量或函数. unset为shell内建指令,可删除变量或函数. 语法unset [-fv][变量或函数名称] 参数:-f 仅删除函数. ...

  6. linux批量命令换行,Linux 下的这些高效指令,是你快速入门运维的神器

    原标题:Linux 下的这些高效指令,是你快速入门运维的神器 Linux是一套免费使用和自由传播的类Unix操作系统,是一个基于POSIX和UNIX的多用户.多任务.支持多线程和多CPU的操作系统.它 ...

  7. linux objdump命令,Linux objdump命令

    一.简介 objdump命令是用查看目标文件或者可执行的目标文件的构成的gcc工具. 二.选项 三.实例 1)显示文件头信息 objdump -f test 2)显示Section Header信息 ...

  8. linux nohup命令启动程序,关闭shell,程序依然会关闭

    linux nohup命令启动程序,关闭shell,程序依然会关闭 解决办法 执行完nohup命令之后,使用exit命令退出shell登录 > nohup ./aaa & > ex ...

  9. Linux服务enable,Linux enable命令 - Linux系统设置命令参数及用法大全

    Linux enable命令用于启动或关闭 shell 内建指令. 若要执行的文件名称与shell内建指令相同,可用enable -n来关闭shell内建指令.若不加-n参数,enable可重新启动关 ...

最新文章

  1. curl 命令行下载工具使用方法小结
  2. Attic——删除重复数据的备份程序
  3. Python统计网站访问日志log中的IP信息,并排序。。
  4. rehat linux设置ip,RedhatHat配置IPv6地址
  5. JVM基础系列第14讲:JVM参数之GC日志配置
  6. 机器学习中目标函数、损失函数以及正则项的通俗解释
  7. Material Design入门
  8. python 且_Pyface库:一个基于pyqt、pyside、wx且简化的python的GUI
  9. 信息学奥赛一本通(1233:接水问题)
  10. C#/VB.NET与西门子PLC进行ModbusTcp通信
  11. 关于java中main方法为什么必须是静态的
  12. caffe 利用python绘制loss曲线以及accuracy曲线
  13. 生命中的七堂课(转)
  14. 【Java并发编程学习】3、线程挂起、恢复和终止
  15. windows系统下Redis下载安装与配置(内附蓝奏云下载地址)
  16. java大学生网上请假系统ssm框架
  17. php imap函数详解,Imap是什么意思,php imap 函数详解
  18. 蓝桥杯省赛 走方格(多种方法)
  19. 结合webpack 一步一步实现懒加载的国际化简易版方案
  20. 视频直播软件未来发展的方向有哪些

热门文章

  1. 关于火车采集js调用文章资讯的方法 淘宝采集 相关
  2. Timer与TimerTask的真正原理使用介绍
  3. Wonderware-InTouch脚本程序、字符串拆分
  4. 请不要安装IP-Guard破解版。
  5. 3d可视化软件之管理驾驶舱,3d管理驾驶舱软件推荐
  6. HDU - 6287 口算训练 (质因子分解 + 二分)
  7. 杨元庆:联想正经历着刮骨疗伤之痛 今年要满血复活
  8. 自己用过的CASS技巧
  9. 如何用快递单号查询快递物流情况
  10. 道路积水监测设备应用案例——积水点监测、立交积水监测、桥梁及隧道区域低洼区积水监测