登录 用户中心() [退出] 后台管理 注册
   
您的位置: 首页 >> SoftHub关联区 >> 主题: 增加定时检测linux占用内存及时清理功能[zt]     [回主站]     [分站链接]
增加定时检测linux占用内存及时清理功能[zt]
clq
浏览(592) - 2022-09-07 11:49:53 发表 编辑

关键字:

[2022-09-07 11:50:34 最后更新]
https://blog.51cto.com/u_15127596/4399416

增加定时检测linux占用内存,及时清理功能 转载

mob604756f59f47
2017-11-12 12:52:00

文章标签
linux
内存free
tomcat
sed
数位
文章分类
Linux
系统/运维
阅读数
20


增加定时检测linux占用内存,及时清理功能


free -m 查看,发现内存跑满了。

再 top,然后按下shift+m,也就是按内存占用百分比排序,发现排在第一的进程,才占用7.9%。

但是总内存大小8G,竟然有5G都被使用了,

那是什么占用的呢?

百度了一下,据说是centos为了提高效率,把部分使用过的文件缓存到了内存里。

如果是这样的话,我又不需要这样的文件性能,那就可以释放。如下两个命令就可以:

#sync

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

内存释放后,就占用很低了,



写一个脚本,然后使用crontab定时没分钟执行一次,检测内存量使用超过80%的时候报警,释放内存,

释放内存脚本如下:





#!/bin/bash

#系统分配的区总量
mem_total=`free -m | awk 'NR==2' | awk '{print $2}'`

#当前剩余的大小
mem_free=`free -m | awk 'NR==3' | awk '{print $4}'`

#当前已使用的used大小
mem_used=`free -m | grep Mem | awk '{print $3}'`

if (($mem_used != 0)); then

#如果已被使用,则计算当前剩余free所占总量的百分比,用小数来表示,要在小数点前面补一个整数位0
mem_per=0`echo "scale=2;$mem_free/$mem_total" | bc`
DATA="$(date -d "today" +"%Y-%m-%d-%H-%M") free percent is : $mem_per"
echo $DATA >> /var/log/mem_detect.log
#设置的告警值为20%(即使用超过80%的时候告警)。
mem_warn=0.20

#当前剩余百分比与告警值进行比较(当大于告警值(即剩余20%以上)时会返回1,小于(即剩余不足20%)时会返回0 )
mem_now=`expr $mem_per \> $mem_warn`

#如果当前使用超过80%(即剩余小于20%,上面的返回值等于0),释放内存
if (($mem_now == 0)); then
sync
echo 1 > /proc/sys/vm/drop_caches
echo 2 > /proc/sys/vm/drop_caches
echo 3 > /proc/sys/vm/drop_caches
#将release memory OK !写入temp文件夹的memstat_日期.log日志中
echo "--->release memory OK ! " >>temp/memstat_$(date +%Y%m%d_%H%M%S).log

fi
fi

1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.








下面说一下怎么使用定时:





一. Crontab 介绍

crontab命令的功能是在一定的时间间隔调度一些命令的执行。

二.查看/etc/crontab文件

vim /etc/crontab



在crontab中增加定时任务





三.文件/etc/crontab中每行任务的描述格式如下:

minute hour day month dayofweek command

minute - 从0到59的整数

hour - 从0到23的整数

day - 从1到31的整数 (必须是指定月份的有效日期)

month - 从1到12的整数 (或如Jan或Feb简写的月份)

dayofweek - 从0到7的整数,0或7用来描述周日 (或用Sun或Mon简写来表示)

command - 需要执行的命令(可用as ls /proc >> /tmp/proc或 执行自定义脚本的命令)







如果是每五分钟执行一次可改为:

*/5 * * * * /home/dbbackup/db2backup.sh







四.crontab服务的启动关闭

sbin/service crond start //启动服务 /sbin/service crond stop //关闭服务 /sbin/service crond restart //重启服务 /sbin/service crond reload //重新载入配置

代码如下:





#!/bin/bash
echo "current time is $(date -d "today" +"%Y-%m-%d-%H-%M-%S")" >>/usr/local/tomcat/logs/monitor/mem_auto_$(date +%Y%m%d).log
#系统分配的区总量
mem_total=`free | grep "Mem:" |awk '{print $2}'`
echo "mem_total is $mem_total " >>/usr/local/tomcat/logs/monitor/mem_auto_$(date +%Y%m%d).log
#当前剩余的大小
mem_free=`free | grep 'buffers/cache' | awk '{print $3}'`

echo "mem_free is $mem_free" >>/usr/local/tomcat/logs/monitor/mem_auto_$(date +%Y%m%d).log
#当前已使用的used大小
mem_used=`free -m | grep Mem | awk '{print $3}'`
echo "mem_used is $mem_used" >>/usr/local/tomcat/logs/monitor/mem_auto_$(date +%Y%m%d).log
if (($mem_used != 0)); then

#如果已被使用,则计算当前剩余free所占总量的百分比,用小数来表示,要在小数点前面补一个整数位0
mem_per=0`echo "scale=2;$mem_free/$mem_total" | bc`
echo "free percent is $mem_per" >>/usr/local/tomcat/logs/monitor/mem_auto_$(date +%Y%m%d).log
DATA="$(date -d "today" +"%Y-%m-%d-%H-%M-%S") free percent is : $mem_per"
echo $DATA >> /usr/local/tomcat/logs/monitor/mem_auto_$(date +%Y%m%d).log
echo $DATA >> /var/log/mem_detect.log
#设置的告警值为44%(即使用超过56%的时候告警)。
mem_warn=0.4
echo "mem_warn is $mem_warn" >>/usr/local/tomcat/logs/monitor/mem_auto_$(date +%Y%m%d).log
#当前剩余百分比与告警值进行比较(当大于告警值(即剩余44%以上)时会返回1,小于(即剩余不足44%)时会返回0 )
mem_now=`expr $mem_per \> $mem_warn`
echo "剩余百分比与警告值比较 mem_now is $mem_now" >>/usr/local/tomcat/logs/monitor/mem_auto_$(date +%Y%m%d).log
echo "when mem_now is 1 , means mem is ok ! " >>/usr/local/tomcat/logs/monitor/mem_auto_$(date +%Y%m%d).log

echo "-----------------------------------" >>/usr/local/tomcat/logs/monitor/mem_auto_$(date +%Y%m%d).log
#如果当前使用超过56%(即剩余小于44%,上面的返回值等于0),释放内存
if (($mem_now == 0)); then
echo "but now the mem_now is 0 ,小于(即内存剩余不足44%),所以清理内存, start to clear memery....." >>/usr/local/tomcat/logs/monitor/mem_auto_$(date +%Y%m%d).log
sync
echo 1 > /proc/sys/vm/drop_caches
echo 2 > /proc/sys/vm/drop_caches
echo 3 > /proc/sys/vm/drop_caches
echo "---> start auto clear memery is OK ! $DATA , warn is $mem_warn ,小于(即内存剩余不足44%),所以清理内存, " >>/usr/local/tomcat/logs/monitor/mem_auto_$(date +%Y%m%d_%H).log

fi


#取当前空闲cpu百份比值(只取整数部分)
cpu_idle=`top -b -n 1 | grep Cpu | awk '{print $5}' | cut -f 1 -d "."`
echo "cpu_idle percent is $cpu_idle,cpu 剩余量充足,警告值是当剩余不足30%时,自动清理内" >>/usr/local/tomcat/logs/monitor/mem_auto_$(date +%Y%m%d).log
echo "================================================================" >>/usr/local/tomcat/logs/monitor/mem_auto_$(date +%Y%m%d).log
#设置空闲cpu的告警值为30%,如果当前cpu使用超过70%(即剩余小于30%),立即发邮件告警,自动清理内存
if (($cpu_idle < 30)); then
echo " cpu 剩余不足30% ,所以清理内存, start to clear memery....." >>/usr/local/tomcat/logs/monitor/mem_auto_$(date +%Y%m%d).log
sync
echo 1 > /proc/sys/vm/drop_caches
echo 2 > /proc/sys/vm/drop_caches
echo 3 > /proc/sys/vm/drop_caches
echo "--->cpu used more than 70% ,so start auto clear memery is OK ! $DATA , warn is $mem_warn " >>/usr/local/tomcat_treasure/logs/memery_monitor/memstat_cpu_auto_$(date +%Y%m%d_%H).log

fi
fi

1.
2.
3.
4.
5.


总数:0 页次:1/0 首页 尾页  
总数:0 页次:1/0 首页 尾页  


所在合集/目录
操作系统内存占用高 更多



发表评论:
文本/html模式切换 插入图片 文本/html模式切换


附件:



NEWBT官方QQ群1: 276678893
可求档连环画,漫画;询问文本处理大师等软件使用技巧;求档softhub软件下载及使用技巧.
但不可"开车",严禁国家敏感话题,不可求档涉及版权的文档软件.
验证问题说明申请入群原因即可.

Copyright © 2005-2020 clq, All Rights Reserved
版权所有
桂ICP备15002303号-1