Hibernate,Spring和Oracle的Web应用程序可达99%的CPU

我们在Linux环境中有一个Web应用程序,CPU有时会达到99%。

有时需要几天,其他时间需要几分钟。 我们在tomcat webapp和Oracle数据库中使用Spring的Hibernate。

检查日志显示如下:

“ConnectionManager – 事务在on_close连接释放模式下完成,确保closures会话以释放JDBC资源!”。

然后sessioncount开始增长到256个会话(我们的Apache confs允许的最大值)。 这是会话计数达到256时显示的行:

“ContainerBackgroundProcessor [StandardEngine [Catalina]] ManagerBase – 开始过期会话StandardManager 1259947978384 sessioncount 256”

之后,CPU得到99%。

有什么build议么? 所有将高度赞赏。

提前致谢。

有很多事情可能是。 我的经验是这往往是由于记忆问题。 当使用的堆大小变大时,垃圾收集器进入过载状态,CPU性能确实受到影响。 一些步骤来隔离这个问题:

  • 监视系统,而CPU正在使用顶部尖峰。 确认CPU使用来自Java。 (不幸的是,你不能比这更精确)。

  • 监视使用VisualVM或JConsole的堆大小。 正常的行为是看到堆的大小逐渐增加,然后突然下降,当GC踢(锯齿图案)。 如果内存使用率居高不下,则无法收集垃圾

  • 这可能是显而易见的,但检查您的日志OutOfMemoryExceptions

  • 确保您的VM正在使用最大可能的堆大小。 对于32位JVM,这是1400或1500M。 使用JVM选项-Xmx1500M。

  • 确保操作系统没有使用太多的交换内存(检查顶部或免费)。 确保它有足够的内存来运行Linux和Tomcat(3或4 GB是32位机器的良好开端)。

还有一点需要注意 – 查看应用程序的内存和连接泄漏情况。 spring会为你处理这个问题。 确保你没有把东西放在HttpSession对象(或Session中的一个映射)中,而不需要在那里。 如果你做任何直接的JDBC或文件处理,确保所有的stream,连接和PreparedStatements(这是我总是忘记)被closures。

很可能是你的应用程序的问题(我与Jboss有同样的问题)。

当您在Web应用程序上执行特定操作时,可能会出现此问题? 我会试图find应用程序和问题之间的关系。 也许开发人员可以帮助你?

大部分时间:Tomcat,oracle,框架都不是问题。 应用程序是问题:-)(内存泄漏,连接到数据库不closures…)

祝你好运