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等)。
这种类型的停留不会留下任何痕迹。
- 为什么File :: isDirectory作为FileFilter工作正常?
- 如何在Java中将String(日期)格式化为新的日期格式?
- 无法从salesforce站点重定向回Spring Boot JSP
- LocalDate序列化错误
- 为什么使用Java套接字从未到达输入流的末尾?
- 如何可视化neo4j图
- Javascript / NodeJS等效代码为Java代码Cipher.doFinal(byte )?
- 线程“main”中的exceptionjava.lang.UnsatisfiedLinkError:java.library.path中没有opencv_java249
- IntelliJ问题+获取当前工作目录