Shell实现强制释放内存脚本分享
公司服务器最近两天老是因为内存被使用满而造成死机,实在是受不了老叫机房的人去帮忙重启,专门写了个脚本来释放下内存,当然这台服务器不是太重要,我粗鲁的处理方式估计不会适合大多数服务器,请大家使用之前先考虑清楚,不然造成数据丢失就不关我的事了.
脚本内容:
catcheck-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|grepMem|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")freepercentis:$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 echo3>/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|grepMem|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")freepercentis:$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 echo3>/proc/sys/vm/drop_caches fi fi