Tomcat进程在没有任何日志的情况下崩溃

时间:2013-11-08 06:28:09

标签: java tomcat

我正在以root权限运行Tomcat,并且有一个url,每当我访问时,它都会导致Tomcat进程终止,而catalina.log中没有任何日志。事实证明我的应用程序中存在死循环。但我的假设是在处理请求时死循环(实际上是无限递归)只会导致stackoverflow异常,它可能会终止由Tomcat创建的当前线程。

我的问题是,这可能是一个死循环的应用程序导致整个Tomcat崩溃?如果是这样,我如何观察错误日志?

很抱歉我没有指出它实际上它是我的代码中的无限递归,我在Eclipse下调试了很多,并且它是从不退出停止请求的递归但是我在等待之后只得到了StackOverflowError很长一段时间,但我想知道为什么tomcat崩溃了?

1 个答案:

答案 0 :(得分:2)

你真的需要更具体,并展示一些相关的代码。但是,有几点想法:

  • 单独一个无界循环不会导致StackOverflowError。它会无限期地停止。这种异常通常是由于深度递归而导致堆栈空间不足造成的,这不是您描述代码的方式。

  • 听起来你有一个关于违规代码所在的预感。在这种情况下,您应该自己添加一些日志消息以获取更多信息。有关登录Tomcat的信息,请参阅以下资源:

  • 您可能还希望考虑在调试器中运行您的服务(例如,Eclipse有一个Web应用程序调试器,就像许多IDE一样)和/或在Tomcat之外测试您的代码。

如果您想要更具体的答案,则必须发布更详细的信息。


有关您的修改的更新:

Tomcat在一个JVM中运行所有Web应用程序(并且它也在该JVM中运行),只是使用不同的类加载器。这意味着所有应用程序共享相同的堆栈空间,因此可以想象如果一个应用程序占用过多的堆栈空间,其他应用程序和Tomcat本身也会开始遇到问题 - 可能会遇到自己的堆栈溢出错误。这是我没有看到任何代码所能获得的具体内容。

如果您有一个应用程序存在行为不端的风险,则可以运行多个Tomcat实例(即单独的JVM),以便该应用程序中的问题不会影响其他应用程序。有关运行多个实例并将它们集成在一起的信息,请参阅Tomcat发行版附带的文件 RUNNING.TXT

然而,显然,最好的方法是在代码中修复问题。 :)