Tomcat停止没有任何日志或任何堆栈

我们遇到Tomcat 5.5的问题,它在我们的生产服务器(Linux CentOS 4.8)上夜间停止,我们不知道为什么它会停止…没有Tomcat登录catalina.out或任何应用程序的日志。

我们尝试了不同的东西来找到服务器停止的原因:

  • 配置Tomcat以生成核心转储
  • 仪器System.exit()方法用javassist查找方法是否被调用
  • 向JVM添加一个关闭钩子(使用Runtime.getRuntime().addShutdownHook()

它们都没有工作,我们没有核心转储,没有调用Exit方法和关闭钩子。 我的结论是:

  • VM未正确终止,但在没有任何日志的情况下崩溃。

任何想法或日志阅读找到Tomcat停止的原因?

1)确保你知道stderr被重定向的位置并检查是否有任何打印在那里。

2)检查Tomcat的内存限制以及系统有多少可用内存。 查看/ var / log下的Linux系统日志,查看在此期间是否发生了任何可疑事件。 例如,如果系统内存不足,内核可以随机杀死进程(几乎)而无需跟踪。

我们已经生产了5.5年的生产,从未有任何无法解释的停机,FWIW。

这对我有用。

正如在其他答案中所建议的那样检查系统登录/var/log/messages但是对我的权限被拒绝。 所以,我使用了dmesg命令,并在日志中得到了这个

“内存不足:杀死进程14606(java)得分106或牺牲孩子”。

在输出中我也注意到Swap Memory free 0 K.top命令确认相同。 所以,不知何故,内存使用率很高,导致操作系统终止我的tomcat进程。

花了好几个小时终于得到了理由。

ps -ef | grep tomcat ps -ef | grep tomcat显示有几个tomcat进程在同一个应用程序中运行。 似乎早期的tomcat关闭可能没有成功完成,并且由于某种原因,即使在关闭之后进程也没有被杀死,这导致了高内存使用。

因此,使用kill杀死所有正在运行的tomcat进程。 SWAP内存被释放。

再次启动tomcat,工作正常。 🙂

Tomcat 7在catalina中有一个选项来阻止System.exit类调用或类似的东西: http : //ci.apache.org/projects/tomcat/tomcat7/docs/security-manager-howto.html 。

也许5.5版本有类似的选择。 试试文档。

可以选择将输出重定向到用于启动Tomcat的同一控制台。 当您在基于Unix的系统上执行时,此信息将重定向到日志,在Windows上,如果未重定向,它将保留在控制台中。

最有可能是堆栈溢出exception。 这是Tomcat发生时的典型行为。 例如,您正在尝试序列化为具有循环依赖关系的JSON或XML bean(但不处理循环)。

每次我遇到这个问题(好几次)都是这个问题。 所有其他停靠点通常都会正确记录(如OutOfMemory等)。

这种类型的停留不会留下任何痕迹。