Tomcat之——宕机自动重启和每日定时启动tomcat
转载请注明出处: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:
[java]view plain
copy
- 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();
- }
- }
【Tomcat之——宕机自动重启和每日定时启动tomcat】
[plain]view plain copy
- #系统命令 启动
- 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
[java]view plain copy
- java -cp . TomcatMonitor
推荐阅读
- 急于表达——往往欲速则不达
- 慢慢的美丽
- 《真与假的困惑》???|《真与假的困惑》??? ——致良知是一种伟大的力量
- PMSJ寻平面设计师之现代(Hyundai)
- 太平之莲
- 2019-02-13——今天谈梦想()
- 闲杂“细雨”
- 七年之痒之后
- 深入理解Go之generate
- 考研英语阅读终极解决方案——阅读理解如何巧拿高分