检测weblogic的server内存溢出并将其重启的脚本

背景:手头有个预生产环境,某个应用的server经常内存溢出;该环境没有部署监控系统,所以经常接到现场支持的反馈电话说系统无法使用,属于被动式的监控;
给现场支持和运维人员都增加工作负担;后来我就想写一个脚本,检测内存溢出后将该sever重启(集群),试过很多高大上的方法没成功,最后用本文这个脚本实现了。

AutoRestart.sh
#!/bin/bash
#Coding by Hailang
source /weblogic/Oracle/Middleware/wlserver_10.3/server/bin/setWLSEnv.sh >/dev/null 2>&1
echo `date`
adminServer='t3://ipaddress:9001'
ysc_svr001='t3://ipaddress:8001'
ysc_svr002='t3://ipaddress:8002'


RTT=`java weblogic.Admin -url $ysc_svr001 -username weblogic -password weblogic123 PING|grep RTT`
if [ ! "$RTT" ];then
        echo "Over!"
ps -ef|grep ysc_svr001|grep -v grep|awk '{print $2}'|xargs kill -9
sleep 3
        pid=`ps -ef|grep ysc_svr001|grep -v grep|awk '{print $2}'`
        if [ "$pid" ];then
            echo "Starting by NodeManager!"
        else
            java weblogic.Admin -url $adminServer -username weblogic -password weblogic123 START ysc_svr001
        fi
else
        echo "ysc_svr001":$RTT
fi


RTT=`java weblogic.Admin -url $ysc_svr002 -username weblogic -password weblogic123 PING|grep RTT`
if [ ! "$RTT" ];then
        echo "Over!"
ps -ef|grep ysc_svr002|grep -v grep|awk '{print $2}'|xargs kill -9
sleep 3
        pid=`ps -ef|grep ysc_svr002|grep -v grep|awk '{print $2}'`
        if [ "$pid" ];then
            echo "Starting by NodeManager!"
        else
            java weblogic.Admin -url $adminServer -username weblogic -password weblogic123 START ysc_svr002
        fi
else
        echo "ysc_svr002":$RTT
fi


设置Linux定时任务为:
crontab -l
*/15 * * * * /weblogic/Oracle/Middleware/wlserver_10.3/server/bin/AutoRestart.sh >> /weblogic/Oracle/Middleware/wlserver_10.3/server/bin/autoRestart.log 2>&1


autoRestart.log如下:

Thu Apr 30 15:30:01 CST 2015
ysc_svr001: RTT = ~3 milliseconds, or ~3 milliseconds/packet
Over!
Starting by NodeManager!
Thu Apr 30 15:45:01 CST 2015
ysc_svr001: RTT = ~4 milliseconds, or ~4 milliseconds/packet
ysc_svr002: RTT = ~32 milliseconds, or ~32 milliseconds/packet


在server内存溢出的时候,我及时地做了很多尝试,最后发现内存溢出的时候weblogic.Admin是ping不通的,于是就抓住这个状态写脚本了。


另外:刚开始写脚本的时候关闭内存溢出的server是用weblogic.Admin的方式(官方不推荐使用weblogic.Admin)

java weblogic.Admin -url t3://ipaddress:8001 -username weblogic -password weblogic123 FORCESHUTDOWN ysc_svr001

后来看日志发现这样的方式并不靠谱,经常会报错:

Failed to connect to t3://ipaddress:8001: Bootstrap to yscap01/ipaddress:8001 failed. It is likely that the remote side declared peer gone on this JVM

没辙啦,只能用残忍的kill方式了......


看完这个脚本的朋友很可能会嗤之以鼻,因为脚本太傻瓜式了,循环都不写,假如有100个server呢;不过还好现场支持再也没有打电话说系统挂了,因为集群环境下该脚本能把内存溢出的server及时重启了,这样对大伙很好,不用等到2个server全部挂系统都用不了的才打电话告诉我。


抛砖引玉:还有什么方式能把已经内存溢出的server重启?最好是能做到像控制台那样的“当工作完成时”关闭。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值