Tomcat 意外停止进程处理记录
2018-08-16 15:48:44

前段时间把一网站升级到 Lerx V2.9 beta 。数据库导出导入更改为 MariaDB 5.5。突然发现网站出问题了,启动后会在24小时之内的的某一个时刻进程被关闭。日志没有任何报错的记录。找不到异常。Tomcat运行日志最后显示如下(由于解决好未保存日志,所以下面的日志是复制的网络上的。应该不会有太大的出入):

-------------------------------------------------------------------------------------

2015-4-6 19:13:13 org.apache.coyote.http11.Http11Protocol pause

信息: Pausing Coyote HTTP/1.1 on http-8080

2015-4-6 19:13:14 org.apache.catalina.core.StandardService stop

信息: Stopping service Catalina

2015-4-6 19:13:14 org.apache.catalina.core.StandardContext stop

信息: Container org.apache.catalina.core.ContainerBase.[Catalina].[localhost].[/] has not been started

2015-4-6 19:13:14 org.apache.coyote.http11.Http11Protocol destroy

信息: Stopping Coyote HTTP/1.1 on http-8080

-------------------------------------------------------------------------------------

分析上面的日志,实在找不出原因。似乎就是人为的手动关闭一样。百度发现很多人也发生了这些问题,但没有人发一篇解决办法。

于是翻墙Google什么的,一大堆相同的问题在网上,但可能由于英文水平的问题,没有找到解决办法。

由于近一个半月,无法解决。每每进程中断,唯有手工去再启动 Tomcat 进程。被折磨得苦不堪言。

昨日,在看一篇另外的文章的过程中,意外看到System.exit(X)这个方法,分析中间的X的区别。突然想,是不是Lerx的代码中有这个方法而导致进程主动退出呢。

于是搜索,哈哈哈哈。大乐。

由于前期对Lerx中的动作返回页处理不满意。于是独创出一种方法来处理动作返回:就是利用栈的原理将访问的页面一个一个的压入栈(另写个文本,将不需要记录的URL记入)。这种方法近似乎完美地解决了这一问题。

而这段代码是修改的网上某大侠的代码,代码里原作者这样书写:

 public Object pop() {
        if(isEmpty())
        {
           System.exit(1);
        }else{
            Object result = contents[top-1];
            contents[top-1] = null;//出栈
            top--;
            return result; 
        }
          
        /*书上这样写简便一点:::
         * top--;
         * Object result = contents[top];
         * contents[top] = null;*/       
    }

就是这里面的一行影响了Tomcat的进程。修改了一下,问题解决。


记录如上,如果也解决了您的问题。请关注我们的开源项目。

发布:lzh