来自JVM的陷阱SIGTERM

时间:2013-11-19 07:55:47

标签: java bash tomcat

在bash中是一个有用的命令trap。它拦截各种信号,如SIGKILLSIGHUP等来处理。

所以...我们遇到一个问题, Tomcat 有时会在没有任何明显原因的情况下死亡。并且 - 日志文件中没有任何有用的信息。

我的想法是在其模拟命令中添加trap,以便在 JVM 之前收集jstack Tomcat 将会死亡。

如何在 Java 中执行此操作?请注意 - 我不是Java程序员。

感谢您的任何提示。

1 个答案:

答案 0 :(得分:1)

JVM(至少Oracle)已经安装了信号处理程序,并将信号转换为异常和其他有用的东西。请参阅http://docs.oracle.com/javase/7/docs/webnotes/tsg/TSG-VM/html/signals.html

通常当Tomcat在没有日志的情况下死亡时,它会出现堆栈或堆空间不足的症状(Tomcat在与Web应用程序相同的JVM中运行,并且一个行为不端的应用程序可能会在刷新日志之前使服务器崩溃)。

您使用的是哪种版本的Tomcat?如果您使用的是Tomcat 6+,则可以完全禁用日志缓冲,以便在写入时刷新最终消息。见http://tomcat.apache.org/tomcat-6.0-doc/logging.html

对于JULI,负的bufferSize将在每次写入后强制刷新。