为什么Tomcat 5.5(使用Java 1.4,在Windows XP 32位上运行)突然挂起?

时间:2008-09-15 19:42:36

标签: java windows tomcat

我已经用Java 1.4运行Tomcat 5.5一段时间了,现在有一个巨大的webapp。大多数情况下它运行正常,但有时它会挂起,没有异常生成,并且除了重新启动Tomcat之外没有任何让它再次运行的方法。 tomcat实例在堆上允许1 GB的内存,但很少超过300 MB。有没有其他人遇到过这个问题,并且有解决方案吗?

为了澄清:我通过任务管理器和Eclipse确定了它使用了多少内存(我也尝试在Eclipse之外运行它,但最终会遇到同样的问题,尽管需要更长的时间)。使用Eclipse,我查看通过其小(可选)内存窗格分配的内存以及通过任务管理器分配给javaw.exe的数量。我用的是sysdeo? Eclipse的tomcat插件。

4 个答案:

答案 0 :(得分:3)

对于任何jvm进程,强制进行线程转储。在Windows中,我相信,这可以通过CTRL-BREAK在控制台窗口中完成。

在* nix中,它几乎总是“kill -3 jvm-pid”。

如果你有线程等待数据库连接池/线程池等,这可能会显示

要检查的另一件事是你当前有多少连接到JVM - 使用NETSTAT或SysInternals实用程序,如tcpconn / tcpview(google it)。

另外,尝试使用verbose:gc JVM标志运行。对于Sun的JVM,运行方式如“java -verbose:gc”。这将显示您的垃圾收集。如果它收集了很多(特别是FULL COLLECTIONS),那么你可能会有内存泄漏。完整的收藏品价格昂贵,特别是在像这样的大堆上。

您如何确定仅使用300mb?

答案 1 :(得分:0)

听起来你正陷入僵局。

如果您可以在开发环境中重现它,那么尝试在调试器发生后附加它。看看你的线程,看看你是否有任何死锁。

如果您无法连接调试器,您应该能够生成线程转储,正如Dustin指出的那样。

答案 2 :(得分:0)

尝试提高Tomcat应用程序服务器的日志记录敏感度。 http://tomcat.apache.org/tomcat-5.5-doc/logging.html

你可以在几天内增加对大多数人的FINEST或ALL的敏感度,看看是否有助于你抓住任何东西。

答案 3 :(得分:0)

我同意创建多个线程转储并查看它们:Thread Dump Analyzer