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

Java Tomcat进程在没有任何日志的情况下崩溃,java,tomcat,Java,Tomcat,我使用root权限运行Tomcat,并且有一个url,每当我访问它时,它都会导致Tomcat进程在没有任何catalina.log日志的情况下终止。结果是我的应用程序中有一个死循环。但我的假设是,处理请求时的死循环(实际上是无限递归)只会导致stackoverflow异常,该异常可能会终止Tomcat创建的当前线程 我的问题是,应用程序的死循环是否可能导致整个Tomcat崩溃?如果是,我如何观察错误日志 很抱歉,我没有指出它实际上在我的代码中是一个无限递归,我在Eclipse下对它进行了很多调试

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

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


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

您确实需要更具体一些,并显示一些相关的代码。然而,有几个想法:

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

  • 听起来好像你对违规代码的位置有预感。在这种情况下,您可能应该自己添加一些日志消息以获取更多信息。有关登录Tomcat的信息,请参阅以下参考资料:

    • (假定为窗口)。

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

如果你想得到更具体的答案,你必须发布更详细的信息


有关编辑的更新:

Tomcat在单个JVM中运行所有web应用程序(它也在该JVM中运行),只是使用不同的类装入器。这意味着所有应用程序共享相同的堆栈空间,因此可以想象,如果一个应用程序占用了太多的堆栈空间,那么其他应用程序和Tomcat本身也将开始遇到问题——可能会遇到它们自己的堆栈溢出错误。这是我在没有看到任何代码的情况下所能得到的最具体的信息

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


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

谢谢你的回答!我已经编辑了我的问题@夜神ライト 我已经更新了答案,提供了更多(希望有用)的信息和关于为这个行为不端的应用程序运行一个单独的Tomcat实例的说明。您好,我在$JAVA_HOME和$Tomcat_HOME下搜索了每个文件夹,但仍然找不到hs_err_pid.log文件。我应该在运行Tomcat时添加一些设置吗?好的,如果您可以升级到Tomcat 6.x,您可以尝试确保日志缓冲被禁用,如(请参阅juli配置或您正在使用的任何记录器)。AFAIK Tomcat 5.5没有缓冲控制选项,至少juli没有。但实际上,您应该修复代码中的错误(一个简单的测试是禁用该部分代码——您说您在调试器中看到了错误,您应该尝试在调试器中更正错误)。您正在运行哪个版本的Tomcat,在哪个平台上运行?但是Tomcat是否会在没有任何日志的情况下退出,我在catalina.out或其他日志中没有找到任何日志。顺便说一句,5.5.31版。如果Tomcat崩溃,特别是因为堆栈空间不足而崩溃,那么真的不知道会发生什么问题。也许它没有刷新日志,或者日志记录工具由于堆栈空间不足而遇到错误。这个答案的作者:还观察到Tomcat由于堆栈错误而崩溃,通常不会留下任何日志。如果JVM崩溃,它可能会在某处留下一个hs_err_pid.log文件。