windows tomcat监控批处理程序,tomcat状态异常时自动重启

 有一个java工程没有源代码,经常出现内存溢出等问题导致服务无法正常使用。

使用下面的批处理命令实现当应用出现异常时自动重启tomcat程序。

使用方法:

1、下载curl程序,用于探测服务是否可用。下载地址:https://curl.se/windows/dl-7.75.0_3/curl-7.75.0_3-win64-mingw.zip

2、将下面的代码保存为tomcat_monitor.bat 放在tomcat/bin下

3、将<%response.getWriter().write("OK");%> 保存为healthcheck.jsp 放入webapp项目目录下

4、修改tomcat_monitor.bat中的几个参数,HealthCheckUrl 、TomcatHome、TomcatBinPath、CURL 这几个参数必须按自己的实际环境进行修改,其他参数可选修改。

5、创建计划任务,每分钟执行一次,执行程序选择 tomcat_monitor.bat

@echo off
setlocal enabledelayedexpansion
rem 把此脚本放在tomcat启动脚本所在目录tomcat/bin/下面
rem curl下载地址:https://curl.se/windows/dl-7.75.0_3/curl-7.75.0_3-win64-mingw.zip
rem healthcheck.jsp 文件内容:<%response.getWriter().write("OK");%>

rem config
set MaxTryCnt=3
set MaxCheckCnt=60
set HealthCheckUrl="http://127.0.0.1:8080/app/healthcheck.jsp"
rem TomcatHome路径要用双斜杠\\ 用于查找tomcat进程ID
set TomcatHome=G:\\apache-tomcat-7.0.53\\
set TomcatBinPath=G:\apache-tomcat-7.0.53\bin\
set TomcatStartBat=%TomcatBinPath%\startup.bat

rem 出现在''中的字符串命令需要进行转义 %->%%,\->\\,|->^^^|
rem 从任务计划启动tomcat与从用户UI操作启动tomcat,jps互相不可见,从哪个环境启动的java,从该环境jps才能看到。
set CURL=G:\apache-tomcat-7.0.53\curl-7.75.0-win64-mingw\bin\curl.exe
set HealthcheckCmd=%CURL% -s --connect-timeout 5 -m 5 %HealthCheckUrl%
set FindTomcatCmd=wmic process where "commandline like '%%%TomcatHome%%%org.apache.catalina.startup.Bootstrap%%' and name='java.exe'" get processid ^^^|findstr "[0-9]"

set logPath=%TomcatBinPath%\monitor_logs\
if not exist %logPath% mkdir %logPath%

set hourvar=%time:~0,2%
if /i %hourvar% LSS 10 (
	set hourvar=0%time:~1,1%
)
set daystr=%date:~0,4%%date:~5,2%%date:~8,2%
set nowtime=%date:~0,4%-%date:~5,2%-%date:~8,2% %hourvar%:%time:~3,2%:%time:~6,2%
set nowtimestr=%date:~0,4%%date:~5,2%%date:~8,2%%hourvar%%time:~3,2%%time:~6,2%

set logFile=%logPath%\monitor.log

rem init
set /a tryCnt=0
set checkCnt=0
set checkMode=0

:HealthCheck
echo healthcheck
set result=
for /f "delims=" %%t in ('%HealthcheckCmd%') do set result=%%t

rem HealthCheck Success
if "%result%" EQU "OK" goto End

if %checkMode% EQU 1 goto CheckTomcatStartComplete

rem HealthCheck Failed
echo [%nowtime%] HealthCheck Failed,result:"%result%" >>%logFile%
set /a tryCnt=%tryCnt%+1
if !tryCnt! LSS %MaxTryCnt% goto HealthCheck

:SearchTomcatProcess
rem find and kill tomcat
set TomcatPid=
for /f "delims= " %%t in ('%FindTomcatCmd%') do set TomcatPid=%%t

rem not found tomcat process
if "%TomcatPid%" EQU "" (
	echo [%nowtime%] Not Find TomcatPid!  >>%logFile%
	goto StartTomcat
)

:KillTomcat
echo [%nowtime%] Find Tomcat,Pid:%TomcatPid%  >>%logFile%
jmap -heap %TomcatPid% >>%logPath%\heap_stack_%nowtimestr%.log
jstack -l %TomcatPid% >>%logPath%\heap_stack_%nowtimestr%.log
taskkill /PID %TomcatPid% /T /F
echo [%nowtime%] Killed Tomcat,Pid:%TomcatPid%  >>%logFile%

:StartTomcat
echo [%nowtime%] Start Tomcat.  >>%logFile%
%~d0
cd %TomcatBinPath%
call %TomcatStartBat%

rem 等待Tomcat启动完成
set checkMode=1
:CheckTomcatStartComplete
set /a checkCnt=%checkCnt%+1
if !checkCnt! LSS %MaxCheckCnt% (
	timeout /T 5 /NOBREAK
	goto HealthCheck
)
echo [%nowtime%] Start Tomcat Failed.  >>%logFile%
exit 1

:End
echo [%nowtime%] Start Tomcat Success.  >>%logFile%
echo End!
rem pause
exit 0

 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值