如何解决因信号量引发tomcat异常退出的问题

介绍

这篇文章主要介绍如何解决因信号量引发tomcat异常退出的问题,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!

近期在玩大数据。有个朋友找过来,说他线上的tomcat会莫名其妙的退出,表示非常苦恼,请我帮看看。每次他发现退出了,都通过腾讯云的网络控制台登录,启动tomcat。

本着助人为乐(邵拷郝chi)的精神,我连上去开始分析。首先肯定是看tomcat的日志,看看有没有记录到相关信息,是什么途径退出的。

如何解决因信号量引发tomcat异常退出的问题“> <img src=

从日志上看,tomcat收到了退出请求,并按照要求关闭容器。那么是否可以认为是有人执行了关闭。sh呢?并不能。执行了关闭脚本的关闭日志是这样的。

如何解决因信号量引发tomcat异常退出的问题

与其相关的tomcat源码截图如下。截图左侧有行号。

tomcat启动时,设置在等待,等待关闭指令进入启动.org \ apache \卡特琳娜\ \引导。java

如何解决因信号量引发tomcat异常退出的问题

如何解决因信号量引发tomcat异常退出的问题

catalinaDaemon的定义如下。

如何解决因信号量引发tomcat异常退出的问题

org \ apache \卡特琳娜\启动\卡特琳娜。java

如何解决因信号量引发tomcat异常退出的问题

如何解决因信号量引发tomcat异常退出的问题

如何解决因信号量引发tomcat异常退出的问题

如何解决因信号量引发tomcat异常退出的问题

具体实例化时,会将接口服务器的实例指向StandardServer。类路径如下。

org \ apache \卡特琳娜\ Server.java

org \ apache \卡特琳娜\ \ StandardServer核心。java

而StandServer中的输出相关日志的源码如下:

如何解决因信号量引发tomcat异常退出的问题

读取的配置文件为org \ apache \卡特琳娜\ \ LocalStrings核心。properties

如何解决因信号量引发tomcat异常退出的问题

当tomcat收到正经的关闭指令时,会输出此日志,说明是收到指令关闭容器。

正经的指令关闭容器,相关代码如下。

如何解决因信号量引发tomcat异常退出的问题

如何解决因信号量引发tomcat异常退出的问题

那么,现在的证据说明,这个tomcat不是通过SHUTDOWN报文关闭的。而且,从下图来看,也颇能说明这个SHUTDOWN指令不是这么容易发成功的。

如何解决因信号量引发tomcat异常退出的问题

那么现在可能性最大的办法就是通过KILL指令来操作。执行bash脚本需要登录机器,那么从wtmp、utmp查找一下这个时间点的登录记录呢?

如何解决因信号量引发tomcat异常退出的问题

如何解决因信号量引发tomcat异常退出的问题

下面是IPIP的结果。

如何解决因信号量引发tomcat异常退出的问题

换言之,23日早上tomcat异常退出的时候,有一个来自腾讯云的BGP机房的地址也巧合的断开了会话。而我这个朋友的机器就放在腾讯云。有点奇怪是吗?

如何解决因信号量引发tomcat异常退出的问题