我有一个Tomcat实例,它会因为未知原因而定期崩溃。
日志中没有任何错误,只有事件查看器中的一行说“Tomcat意外终止”。
在测试环境中,我无法复制该问题。因此,我主要局限于对生产环境的被动监控。
问题似乎与内存无关,因为意外的终止显示与进程的内存使用没有明显的关联。
我可以采取哪些步骤来进一步诊断此问题?
编辑:
一些更正/澄清:
它实际上不是Tomcat的单个“实例”,而是具有类似配置的几个实例。
操作系统是Windows 2003。
Java版本是Java 6.
更新
看起来这个问题可能与内存有关。发现了一些在Tomcat目录中创建的故障转储(不是...... / Tomcat / logs)。
转储主要包含错误,例如:
java.lang.OutOfMemoryError:为ChunkPool :: allocate请求了32756个字节。没有交换空间?
这是意料之外的,因为当内存使用量相对较低时(与历史使用情况相比),该过程有时会崩溃。
在所有转储中,perm gen空间的使用率为99%,但从绝对意义上讲,这种使用情况并不一致,并且远未达到-XX:MaxPermSize中指定的限制。
答案 0 :(得分:1)
这向我表明整个JVM崩溃了,这是一件相当不寻常的事情。我会考虑以下步骤:
答案 1 :(得分:1)
通常,如果进程在Windows中崩溃,则会创建转储文件。在windbg(Windows调试器)中加载转储文件,并获取导致异常的线程的堆栈跟踪。这应该可以让您更好地了解问题所在。