逆战策士 - 专精游戏活动策略库
首页资源计算正文

Tomcat之——宕机自动重启和每日定时启动tomcat

2026-01-31 11:26:39

大家好,又见面了,我是你们的朋友全栈君。

转载请注明出处:http://blog.csdn.net/l1028386804/article/details/60587663

在项目后期维护中会遇到这样的情况,tomcat在内存溢出的时候就出现死机的情况和遇到长时间不响应,需要人工手动关闭和重启服务,针对这样的突发情况,希望程序能自动处理问题而不需要人工关于,所以才有了目前的需求。

一、设置tomcat定时启动

1,首先将tomcat注册为服务,先打开tomcat的bin目录下service.bat文件,修改下面的值,这是sevvice的注册名称和显示名称,一般可使用默认值。

set SERVICE_NAME=Tomcat7 set PR_DISPLAYNAME=Apache Tomcat

【然后修改jvm大小,搜索到–JvmMs 128 –JvmMx 256 进行修改,因为做成服务启动,启动的时候就不会用到 catalina.bat,也就不会读取里面的jvm设置了。】(可选,可以不设置)

然后运行cmd命令窗口,cd 到tomcat的bin目录下,运行下面的命令 service.bat install 运行成功过后,会提示服务已经安装成功。

2,制作重启脚本restart.bat,文件内容如下 net stop Tomcat7 net start Tomcat7

3,利用控制面板里面的“任务计划”设置第2步的脚本运行时间计划

4,如果想删除服务,也很简单,先把服务停掉,然后在cmd窗口运行下面的命令即可,后面那个Tomcat7是服务名。 sc delete Tomcat7

需要注意的是,需要先把服务停掉,才能一次删除成功,或者删除之后再停止服务,就会发现服务已经删除成功了。

二、监听tomcat

只要运行start.bat即可,相关配置在config.properties文件中,默认即可, 如果服务名不对应就修改关闭和启动命令的服务名即可:net start 【Tomcat7】括号中服务名,然后运行start.bat

下面是具体的监听代码:

首先是监听类TomcatMonitor .Java:

代码语言:javascript复制import java.io.BufferedReader;

import java.io.IOException;

import java.io.InputStream;

import java.io.InputStreamReader;

import java.net.MalformedURLException;

import java.net.URL;

import java.net.URLConnection;

import java.util.Properties;

/**

* @describe:TomcatMonitor.java

*

* @date 2017-03-06

* @author liuyazhuang

*/

public class TomcatMonitor implements Runnable{

String start=""; //系统命令 启动

String stop=""; //系统命令 关闭

String testHttp=""; //测试连接地址

int testIntervalTime=1;//测试连接间隔时间,单位为秒

int waitIntervalTime=2; //等待测试间隔时间,单位为秒

int testTotalCount=5; //测试连接总次数

Thread thread=null;

public TomcatMonitor(){

InputStream in = TomcatMonitor.class.getResourceAsStream("config.properties");

Properties p = new Properties();

try {

p.load(in);

stop=p.getProperty("stop");

start=p.getProperty("start");

testHttp=p.getProperty("testHttp");

testIntervalTime=Integer.parseInt(p.getProperty("testIntervalTime"));

waitIntervalTime=Integer.parseInt(p.getProperty("waitIntervalTime"));

testTotalCount=Integer.parseInt(p.getProperty("testTotalCount"));

} catch (Exception e) {

e.printStackTrace();

}

System.out.println("*******************初始化成功!*******************");

thread=new Thread(this);

thread.start();

}

public void run() {

System.out.println("正在监控中...");

int testCount=0;

while(true){

testCount=0;

testCount++;

boolean isrun=test();

System.out.println("正在启动测试连接,尝试连接次数为:"+testCount+",结果为:"+(isrun==false?"失败.":"成功!"));

while(!isrun){

if(testCount>=testTotalCount)break;

try {

Thread.sleep(testIntervalTime*1000);

} catch (InterruptedException e) {

e.printStackTrace();

}

testCount++;

System.out.println("正在启动测试连接,尝试连接次数为:"+testCount+",结果为:"+(isrun==false?"失败.":"成功!"));

isrun=test();

}

if(!isrun){

try{

//关闭tomcat服务

Process proc = Runtime.getRuntime().exec(stop);

Thread.sleep(5000);

//启动tomcat服务

System.out.println("测试连接失败,正在重启tomcat");

Process p=Runtime.getRuntime().exec(start);

System.out.println("重启tomcat成功");

}catch(Exception e){

e.printStackTrace();

System.out.println("重启tomcat异常,请查看先关错误信息。。。。。");

}

}

try {

Thread.sleep(waitIntervalTime*1000);

} catch (InterruptedException e) {

e.printStackTrace();

}

isrun=test();

}

}

public boolean test(){

URL url=null;

try {

url = new URL(testHttp);

} catch (MalformedURLException e) {

e.printStackTrace();

}

try {

URLConnection urlConn=url.openConnection();

urlConn.setReadTimeout(15000);

BufferedReader reader = new BufferedReader(new InputStreamReader( urlConn.getInputStream())); //实例化输入流,并获取网页代码

String s;

while ((s = reader.readLine()) != null) {

return true;

}

} catch (Exception e) {

return false;

}

return false;

}

public static void main(String[] args) throws Exception{

TomcatMonitor tm=new TomcatMonitor();

}

}然后是对应的配置文件config.properties:

代码语言:javascript复制#系统命令 启动

start=net start Tomcat7

#关闭

stop = net stop Tomcat7

#测试连接总次数

testTotalCount=3

#连接失败时,再次检测时间间隔,单位为秒

testIntervalTime=3

#连接超时时间,即多少秒tomcat没响应视为宕机,单位为秒

connectionTimeout=15

#tomcat启动时间,防止在tomcat尚未启动完成的时候,程序又去检验tomcat状态,造成尚未启动完成又重新启动,单位为秒

tomcatStartTime=600

#测试连接地址

testHttp=http://127.0.0.1:8080

#正常情况下,每次检测间隔时间,单位为秒

waitIntervalTime=30最后是启动的start.bat:

代码语言:javascript复制java -cp . TomcatMonitor发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/163648.html原文链接:https://javaforall.cn

14寸等于多少厘米 解除QQ安全模式的方法及注意事项(帮助你恢复QQ正常使用,了解QQ安全模式的相关知识)
相关内容