我们有一个正在生产的Spring 2.0.8应用程序,在Tomcat 5.5.x和JRE 1.5.x上运行(是的,我知道,我们应该升级,现在不是重点),Oracle 11g作为我们选择的数据库
我们几个月前已经升级了应用程序(我说7月份),并在过去一个月左右从Oracle 10g切换到Oracle 11g(也改变了Oracle JDBC驱动程序以匹配数据库版本)。
我们在制作过程中遇到了严重且意想不到的问题。截至一天前,相隔数小时的堆空间OutOfMemory错误。这反过来要么将响应时间减慢大约100倍,要么用户无法连接。
我们的设置是:
由于注意到此错误,这就是我们尝试的方法:
我正在寻找有关其他事情的想法。我们在5个不同的制作中总共有相同的设置,这个问题是用户和数据的数量最少。
答案 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有助于找到占用大量内存的对象,我们从那里开始。