调试tomcat崩溃
我有一个Tomcat的实例,它由于未知原因而定期崩溃。调试tomcat崩溃
日志中没有剩余错误,只有在事件查看器中显示“Tomcat意外终止”的一行。
在测试环境中,我无法复制该问题。因此,我主要限于被动监控生产环境。
该问题似乎与内存不相关,因为意外终止与进程的内存使用情况没有明显关联。
我可以采取哪些措施来进一步诊断此问题?
编辑:
一些更正/澄清:
它实际上不是Tomcat的,具有类似配置的,而有些情况下的一个“实例”。
操作系统是Windows 2003
Java版本就是Java 6
UPDATE:
貌似遇到的问题可能毕竟涉及到内存。发现了一些在Tomcat目录中创建的崩溃转储(不包括.../Tomcat/logs)。
转储大多含有错误,如:
java.lang.OutOfMemoryError:要求32756个字节ChunkPool ::分配。在交换空间之外?
这是出乎意料的,因为当内存使用量相对较低时(与历史使用情况相比),进程有时会崩溃。
在所有转储中,perm gen空间的使用率为99%,但绝对而言,此用法不一致,并且远不及-XX:MaxPermSize中指定的限制。
这表明整个JVM崩溃了,这是一件很不寻常的事情。我会考虑以下步骤:
- 首先检查硬件是否正常。运行memtest86 + - http://www.memtest86.com/或在Ubuntu光盘上 - 测试内存。让它运行一段时间是绝对肯定的。
- 然后看看你使用的Java版本是否正常。某些版本的Java 6打破了一些微妙的功能。最新的Java 5可能是一个很好的解决方案。
- 禁用Tomcat本机代码以提高性能。有一个本地库,其中Tomcat使用东西。由于你有一个崩溃的JVM,摆脱本机代码是一个非常好的开始。
- 查看您使用的Windows版本是否存在某些限制。终止前的CPU使用限制或任何其他配额。
感谢您的回复。 现在我排除了硬件故障,因为问题发生在许多不同的服务器上。 操作系统是Windows XP,似乎没有任何CPU使用限制(?) 我会看看我是否可以降级Java版本,并且仍在试图找出如何禁用Tomcat本机代码。 – 2009-10-18 04:51:49
你能否提供关于在Java 6中被破解的“细微功能”的更多细节? – 2009-10-18 05:19:51
我不记得确切的细节,但我有一些东西 - 我认为是Java WebStart - 它已在Java 6的更高版本中得到修复。您可能有类似的东西,因为Java 6 update 10中存在大量内部重构,还没有被抓到。因此建议尝试使用Java 5. 另请注意,您还有其他选择。 IBM和Oracle都有自己的JVM,可能值得检查。还有其他的Web容器存在。根据您的需要,Jetty,Glassfish或Geronimo可以替代。 – 2009-10-18 09:00:06
通常,如果某个进程在Windows中崩溃,将创建一个转储文件。在windbg(windows调试器)中加载转储文件,并获取导致异常的线程的堆栈跟踪。这应该让你更好地了解问题所在。
在Windows XP上这也是如此吗?我一直在考虑进行配置更改以获得这样的转储,但是如果默认情况下创建了一个,那将非常好。 – 2009-10-18 04:57:30
是的,窗户是一样的。检查“启动和恢复”设置 – steve 2009-10-19 05:12:56
请让我们知道原因是什么,当你找到它。 – 2009-10-17 07:42:21