繁体   English   中英

Tomcat 5.5上突然出现Java堆空间错误

[英]Sudden Java Heap Space errors on Tomcat 5.5

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

我们已经在几个月前(我说是七月)升级了该应用程序,并且在过去一个月左右的时间里已从Oracle 10g切换到Oracle 11g(还更改了Oracle JDBC驱动程序以匹配数据库版本)。

我们在生产中遇到了严重而出乎意料的问题。 截至一天前,堆空间OutOfMemory错误相隔数小时。 反过来,这可能会使响应时间降低大约100倍,或者用户无法连接。

我们的设置是:

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

既然注意到了这个错误,这就是我们尝试的方法:

  • 检查日志-似乎没有模式。 显然,日志仅告诉您服务器何时内存不足,因此它们显示的是不再工作的点,而不是问题开始的点。
  • 重新启动服务器
  • 重新安装Tomcat
  • Tomcat可以使用越来越多的内存-这只是延长了问题的时间,当然Tomcat吃得和我们给的一样多
  • 服务器和Apache + Tomcat的全新安装
  • 生成堆转储-似乎没有什么特别之处,大多数内存用于启动应用程序
  • 检查数据库-正常,快速且响应迅速,无锁定

我正在寻找其他方法的想法。 我们总共有5种不同产品的相同设置,而有问题的是用户和数据最少。

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

  • 将JVM升级到Java7。Java5已“报废”,这意味着您将不再获得任何安全补丁……除非您与Oracle Java支持合同签订。

  • 如果您不能升级到Java 7 ...或Java 6,则至少要升级到可以掌握的Java 5最新补丁程序版本。

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

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

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

好的,我们知道了这一点。 事实证明,这是一个很少使用的,写得不好的SQL查询。 分析堆转储有助于找到占用大量内存的对象,我们从那里开始。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM