在温和使用后,Tomcat会随着AbstractProtocol暂停而随机关闭

Sig*_*Sig 19 java spring tomcat hibernate log4j

运行我的webapp一段时间后(时间因小时和天数而异,具体取决于流量)Tomcat似乎随机关闭了自己.在这种情况发生之前,日志中没有任何异常(没有例外)只是我的应用程序发出的正常INFO内容.

任何人都可以帮助如何最好地调试这个?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
Run Code Online (Sandbox Code Playgroud)

Java版本:1.6.0_25-b06 Tomcat版本:6

Joe*_*Joe 5

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

您的代码或杠杆库中可能存在随机的System.exit(),或者您在代码中不正确地抑制了真正的错误消息.我已经多次看到人们在控制器中将其写为错误处理的一种形式:

try {
  // Do something
} catch(Exception e) {
  // No rethrowing or logging, just suppressing
}
Run Code Online (Sandbox Code Playgroud)

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

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