Tomcat 在没有任何日志或任何堆栈的情况下停止

Posted

技术标签:

【中文标题】Tomcat 在没有任何日志或任何堆栈的情况下停止【英文标题】:Tomcat stopped without any log or any stack 【发布时间】:2012-05-05 06:21:51 【问题描述】:

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

我们尝试了不同的方法来找出服务器停止的原因:

配置 Tomcat 以生成核心转储 使用 javassist 检测 System.exit() 方法以查找该方法是否被调用 向 JVM 添加关闭挂钩(使用 Runtime.getRuntime().addShutdownHook()

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

VM 未正确终止,但没有任何日志而崩溃。

有什么想法或日志可以阅读以找出 Tomcat 停止的原因吗?

【问题讨论】:

如果你可以在另一台服务器上复制这个问题,你可以使用jConsole来监控你的JVM 我看到 Tomcat 在 Eclipse 中运行时停在我身上。该停止也没有显示任何类型的消息或日志,但是我认为我将其范围缩小到 Hibernate 递归获取期间的堆栈溢出问题。 我们无法复制该问题,它有时会出现在没有执行任何特定操作的不同服务器上。 您找出导致问题的原因了吗? 【参考方案1】:

1) 确保您知道 stderr 的重定向位置,并检查那里是否打印了任何内容。

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

我们已经在生产中运行了 5.5 多年,从未发生过任何无法解释的停机,FWIW。

【讨论】:

宾果游戏。 /var/log/message 有“内存不足:杀死进程 31201 (java) 得分 783 或牺牲孩子”。 +1。正如 KOF 所建议的那样:/var/log/messages 表明 java 进程被杀死了。 如果您无权访问/var/log/messages,请使用dmesg 命令 /var/log/kern.log 在我的情况下 我和@PbxMan,在 Ubuntu 16.04 上【参考方案2】:

这对我有用。

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

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

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

花了几个小时终于找到了原因。

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

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

再次启动tomcat,工作正常。 :)

【讨论】:

【参考方案3】:

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

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

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

【讨论】:

【参考方案4】:

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

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

这种类型的停止在任何地方都不会留下任何痕迹。

【讨论】:

每次我遇到这个问题(好几次)它总是这个问题。所有其他停止通常都会正确记录(如 OutOfMemory 等)。 有什么方法可以调试/突出显示@Eugene Retunsky?您如何验证该声明?

以上是关于Tomcat 在没有任何日志或任何堆栈的情况下停止的主要内容,如果未能解决你的问题,请参考以下文章

在没有任何日志的情况下在 CocoaLibSpotify 中崩溃

RocketMQ在windows下broker启动失败,没有任何日志

更新云功能后看不到任何日志

Mongo突然关闭,没有任何日志

CefGlue在WinXP下闪退的排除方法

centos,启动tomcat无缘无故启动被中断,kill掉