#!/bin/bash
: <<'COMMENT'
实现功能:
一分钟检查一次 连续三次检查发现在利用率95以上重启软件防止假死
使用方式:
1、将脚本中所有的 icds-cloud-view-1.1.0.jar 替换为 启动的jar包名即可(有好几个,别漏了)
2、在crontab中设置五分钟启动一次即可
重要变量:
viewLog 日志文件保存位置
COMMENT
. /etc/profile
viewPid=$(ps -ef | grep icds-cloud-view-1.1.0.jar | grep java | awk '{print $2}')
java_now_start=1
viewLog=/home/sdnmuser/dzd/view.log
dateView=$(date "+%Y-%m-%d %H:%M:%S")
function viewDie() {
viewPid=$(ps -ef | grep icds-cloud-view-1.1.0.jar | grep java | awk '{print $2}')
if [[ "$viewPid" == '' ]]
then
echo "view死了,时间为:"$dateView >> $viewLog
echo '---------' >> $viewLog
echo '---------' >> $viewLog
/home/sdnmuser/sendi/release/icds-cloud-view/bin/run.sh restart >> $viewLog
echo "view已启动成功,时间为:"$dateView >> $viewLog
java_now_start=0
else
echo "view活了,后续不执行 时间:"$dateView >> $viewLog
echo '---------' >> $viewLog
echo '---------' >> $viewLog
echo '---------' >> $viewLog
if [ $java_now_start -eq 0 ]
then
exit
else
break
fi
fi
}
function viewDieTwo() {
while true
do
echo "执行viewDieTwo方法,轮询view生命状态 "$dateView >> $viewLog
sleep 5
viewDie
done
}
echo "执行第一次view生命状态检查 "$dateView >> $viewLog
viewDieTwo
echo "执行第一次view生命状态检查完毕,view存活 "$dateView >> $viewLog
viewPid=$(ps -ef | grep icds-cloud-view-1.1.0.jar | grep java | awk '{print $2}')
viewNew=$(jmap -heap $viewPid | grep -A 4 "Eden Space:" | grep % | awk -F"." '{print $1}')
viewXun=0
if [ $viewNew -ge 95 ]
then
echo "新生代的值大于95:"$viewNew" 时间:"$dateView >> $viewLog
for ((a=0;a<2;a+=1))
do
echo "第"$a"次执行年轻代空间占有率查询:"$viewNew >> $viewLog
sleep 60
viewNew=$(jmap -heap $viewPid | grep -A 4 "Eden Space:" | grep % | awk -F"." '{print $1}')
if [ $viewNew -lt 95 ]
then
echo "新生代的值已经小于95了,后续不执行 "$dateView >> $viewLog
exit
else
let viewXun=viewXun+1
echo "viewXun的值为:"$viewXun >> $viewLog
fi
done
if [[ $viewXun -eq 2 ]]
then
echo '新生代的值已经连续三次大于95,viewXun='$viewXun':重启,时间为:'$dateView >> $viewLog
/home/sdnmuser/sendi/release/icds-cloud-view/bin/run.sh restart >> $viewLog
echo "view重启完成,执行生命状态轮询检查:第二次生命状态检查 "$dateView >> $viewLog
viewDieTwo
fi
else
echo '新生代的值:'$viewNew' 当前时间:'$dateView >> $viewLog
echo '---------' >> $viewLog
echo '---------' >> $viewLog
echo '---------' >> $viewLog
fi