当前位置: 首页 > 编程笔记 >

Shell实现强制释放内存脚本分享

慕容宏邈
2023-03-14
本文向大家介绍Shell实现强制释放内存脚本分享,包括了Shell实现强制释放内存脚本分享的使用技巧和注意事项,需要的朋友参考一下

公司服务器最近两天老是因为内存被使用满而造成死机,实在是受不了老叫机房的人去帮忙重启,专门写了个脚本来释放下内存,当然这台服务器不是太重要,我粗鲁的处理方式估计不会适合大多数服务器,请大家使用之前先考虑清楚,不然造成数据丢失就不关我的事了.

脚本内容:
cat check-mem.sh


#!/bin/bash

mem_total=`free -m | awk 'NR==2' | awk '{print $2}'`

mem_free=`free -m | awk 'NR==3' | awk '{print $4}'`

mem_used=`free -m | grep Mem | awk '{print  $3}'`

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

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

mem_warn=0.20

mem_now=`expr $mem_per \> $mem_warn`

if (($mem_now == 0)); then

sync

echo 3 > /proc/sys/vm/drop_caches

fi

fi

下面说明下吧:


#!/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 3 > /proc/sys/vm/drop_caches fi fi

 类似资料:
  • 本文向大家介绍实现释放CentOS系统内存的Shell脚本分享,包括了实现释放CentOS系统内存的Shell脚本分享的使用技巧和注意事项,需要的朋友参考一下 这几天发现CentOS系统内存一直涨,即使把apache和mysql关闭了,内存也不释放,可以使用以下脚本来释放内存:   脚本内容:   利用系统crontab实现每天自动运行: 输入以下内容: 每天0点释放一次内存,这个时间可以根据自己

  • 我改进了代码,以便从垃圾收集器中获得更好的结果。 现在,当我调用时,它确实释放了所有内存。但是,当我在不调用 的情况下观察内存使用情况时,应用程序确实会保留并使用越来越多的内存。 这是否意味着我的改进正在起作用,我的所有引用都是正确的,我可以忽略JVM是如何自己释放内存的。或者,我的代码中是否存在其他问题,这些问题是JVM在不运行垃圾收集器的情况下保留更多内存的原因。

  • 问题内容: 我想知道是否有可能告诉bash 分别对stdout / stderr的所有调用或随后的后续调用? 一种快速而又肮脏的解决方案是编写自己的printf实现,并使用它代替内置的任何实现,但是在我看来,我可能不需要这样做。 我正在编写同时运行的多个构建脚本,出于调试的需要,我 确实 需要查看它们按顺序编写的消息。 问题答案: 如果命令使用stdio并连接到终端,则会按行刷新它们。否则,您需要

  • 本文向大家介绍Shell实现的Oracle启动脚本分享,包括了Shell实现的Oracle启动脚本分享的使用技巧和注意事项,需要的朋友参考一下 Usage: sh oracled [start|stop|restart] SIDs 其中SIDs是数据库名,多个名称之间用逗号分隔。缺省的操作是 restart ,也可以指定需要进行的操作( start | stop | restart )

  • 本文向大家介绍Shell实现的iptables管理脚本分享,包括了Shell实现的iptables管理脚本分享的使用技巧和注意事项,需要的朋友参考一下 以前的脚本是用save模式,现在把命令附加到一个文件里面,这样的话,可以方便的二次修改什么的 脚本基本是这样的,大家可以跟自己的情况再次修改~  增加功能什么的。

  • 问题内容: JDK提供了分配所谓的直接ByteBuffer的能力,其中内存是在Java堆之外分配的。这可能是有益的,因为该内存不会被垃圾收集器占用,因此不会增加GC开销:这对于诸如缓存之类的长期存在的属性非常有用。 但是,现有实现存在一个关键问题:仅当拥有的ByteBuffer被垃圾回收时,底层内存才被异步分配;没有办法强制提前解除分配。这可能是有问题的,因为GC周期本身不受ByteBuffer的