我们在生产环境中有一个 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 网络应用
- 甲骨文 11g
由于注意到此错误,这就是我们尝试的方法:
- 检查日志 - 似乎没有模式。显然,日志只会告诉您服务器何时内存不足,因此它们显示不再工作的点,而不是问题开始的点
- 重新启动服务器
- 重新安装Tomcat
- Tomcat 可以使用的内存量增加 - 这只是延长了问题,当然 Tomcat 吃的和我们给的一样多
- 全新安装服务器和 Apache+Tomcat
- 生成堆转储 - 看起来没什么特别的,大部分内存用于启动应用程序
- 检查数据库 - 很好,快速且响应迅速,没有锁
我正在寻找其他可以做什么的想法。我们总共在 5 个不同的作品中使用了相同的设置,这个有问题的设置是用户和数据数量最少。