Tomcat 5.5上的突发Java堆空间错误

时间:2012-10-29 21:50:41

标签: java tomcat tomcat5.5

我们有一个正在生产的Spring 2.0.8应用程序,在Tomcat 5.5.x和JRE 1.5.x上运行(是的,我知道,我们应该升级,现在不是重点),Oracle 11g作为我们选择的数据库

我们几个月前已经升级了应用程序(我说7月份),并在过去一个月左右从Oracle 10g切换到Oracle 11g(也改变了Oracle JDBC驱动程序以匹配数据库版本)。

我们在制作过程中遇到了严重且意想不到的问题。截至一天前,相隔数小时的堆空间OutOfMemory错误。这反过来要么将响应时间减慢大约100倍,要么用户无法连接。

我们的设置是:

  • 运行服务器的Windows机器
  • 启用了SSO的Apache 2.2和Tomcat 5.5,总内存:128MB,最大内存:512MB
  • Spring 2.0.8 Webapp
  • Oracle 11g

由于注意到此错误,这就是我们尝试的方法:

  • 检查日志 - 似乎没有模式。 显然,日志只会告诉您服务器何时内存不足,所以 他们表明了不再工作的重点,而不是重点 问题开始的地方
  • 重启服务器
  • 重新安装Tomcat
  • 增加Tomcat可以使用的内存量 - 这只是延长了问题,当然Tomcat吃的和我们提供的一样多
  • 服务器和Apache + Tomcat的全新安装
  • 生成堆转储 - 没有什么壮观似乎与众不同,大多数内存用于启动应用程序
  • 检查数据库 - 它很好,快速,反应灵敏,没有锁

我正在寻找有关其他事情的想法。我们在5个不同的制作中总共有相同的设置,这个问题是用户和数据的数量最少。

2 个答案:

答案 0 :(得分:1)

现在您已经弄明白了,我建议您将以下内容添加到要做的事情列表中:

  • 将您的JVM升级到Java 7. Java 5已经“终结”,这意味着您将不会再获得任何安全补丁......除非您使用的是Oracle Java支持合同。

  • 如果您无法升级到Java 7 ...或Java 6,那么至少要升级到Java 5的最新补丁版本。

  • 升级到Tomcat 6或7,或至少升级到最新的Tomcat 5.5。

  • 要解决OutOfMemoryError导致严重减速的问题,请确保在JVM命令行上有-XX:+UseGCOverheadLimit选项。

而且,如果您打算在该系统上进行任何重要的开发工作,请考虑将其升级到Spring 3.x.

答案 1 :(得分:0)

好的,我们想出了这个。事实证明这是一个写得很糟糕的SQL查询,几乎没有使用过。分析heapdump有助于找到占用大量内存的对象,我们从那里开始。

相关问题