日常shell工具--检查java服务是否假死,假死救活

#!/bin/bash
: <<'COMMENT'
实现功能:
一分钟检查一次   连续三次检查发现在利用率95以上重启软件防止假死

使用方式:
1、将脚本中所有的 icds-cloud-view-1.1.0.jar 替换为 启动的jar包名即可(有好几个,别漏了)
2、在crontab中设置五分钟启动一次即可

重要变量:
viewLog 日志文件保存位置

COMMENT


#刷线环境变量
. /etc/profile

#查询VIEW的PID
viewPid=$(ps -ef | grep  icds-cloud-view-1.1.0.jar | grep java  | awk '{print $2}')

#如果java_now_start=0,则代表view刚启动,后续的检查新生代就不执行了。等于1则后后续执行
java_now_start=1

#日志
viewLog=/home/sdnmuser/dzd/view.log

#时间
dateView=$(date "+%Y-%m-%d %H:%M:%S")


#新增判断,如果view死去,则启动view
function viewDie() {
#查询VIEW的PID
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
   #使用restart保证view不受影响
   /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

#查询VIEW的PID
viewPid=$(ps -ef | grep  icds-cloud-view-1.1.0.jar | grep java  | awk '{print $2}')


#根据PID查询当前新生代的空间利用率
viewNew=$(jmap -heap $viewPid | grep -A 4 "Eden Space:" | grep % | awk -F"." '{print $1}')

#判断循环次数,次数为2时,重启view
viewXun=0


#判断当前利用率是否大于等于95,首先用20测试
if [ $viewNew -ge 95 ]
 then 
  #如果利用率大于等于95,则每60秒检测一次
  echo "新生代的值大于95:"$viewNew" 时间:"$dateView  >> $viewLog
  for ((a=0;a<2;a+=1))
   do
    echo "第"$a"次执行年轻代空间占有率查询:"$viewNew >> $viewLog
    sleep 60
	#根据PID查询当前新生代的空间利用率
    viewNew=$(jmap -heap $viewPid | grep -A 4 "Eden Space:" | grep % | awk -F"." '{print $1}')
	if [ $viewNew -lt 95 ]  #判断是否小于95,如果小于95则退出脚本不做后续,如果大于则给viewXun+1
	 then
	  echo "新生代的值已经小于95了,后续不执行 "$dateView  >> $viewLog
	  exit
	 else
	  #每次大于指定的值都+1。如果值为2 后续就重启view
	  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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值