Tomcat 在轻度使用后随机关闭,并暂停抽象协议

2022-09-02 04:47:39

在运行我的web应用程序一段时间后(时间因流量而异),Tomcat似乎随机关闭了自己。在发生这种情况之前,日志中没有什么异常(没有例外),只是我的应用程序发出的正常信息。

任何人都可以帮助如何最好地调试它吗?Tomcat中有什么东西会触发信号吗?AbstractProtocol pause

原木:

09-Nov-2011 21:40:19 org.apache.coyote.AbstractProtocol pause
INFO: Pausing ProtocolHandler ["http-bio-80"]
09-Nov-2011 21:40:20 org.apache.coyote.AbstractProtocol pause
INFO: Pausing ProtocolHandler ["ajp-bio-8009"]
09-Nov-2011 21:40:21 org.apache.catalina.core.StandardService stopInternal
INFO: Stopping service Catalina

Java 版本: 1.6.0_25-b06 雄猫版本:6


答案 1

我以前见过这种情况发生过,日志有时可能很神秘。我确实注意到你在端口80上运行(这是另一个问题),这让我相信你修改了你的服务器.xml。如果服务器上有多个 tomcat 实例,请确保它们都具有唯一的关机端口。标准端口为 8005,如果多个实例侦听同一端口,则可以将它们都关闭。

您的代码或杠杆库中可能存在随机的 System.exit(),或者您不正确地禁止显示代码中的真实错误消息。我已经看到很多次人们在控制器中写这个作为错误处理的一种形式:

try {
  // Do something
} catch(Exception e) {
  // No rethrowing or logging, just suppressing
}

这可以防止真正的错误冒泡甚至正确记录。

我还看到tomcat服务器在达到内存限制时停止运行。日志中的某个地方会有一个堆空间错误,但由于某种原因,我发现它很容易被埋葬,剩下的就是暂停消息。除了catalina.out之外.log可能值得在localhost中寻找。那里的垃圾通常更少。


答案 2

如果您正在开发生产盒或想要快速/临时修复,则可能需要将服务器中的关闭端口设置为“-1”.xml,这将禁用关闭命令。这不会让可能具有相同关机端口的其他应用向您的 tomcat 实例发送关机信号。但是有了这个设置,你将不得不杀死你的雄猫,而不是关闭它。这是不好的部分。


推荐