java - Spring内存使用率过高

标签 java spring hibernate spring-mvc memory-leaks

我有一个结合了 Spring + Hibernate 的 Web 应用程序。我将其部署在 Tomcat 服务器本地,内存消耗约为 150-200 Mb,据我所知,这根本没有那么高。但显然在通过 WebSphere 运行的生产部署中,我获得了 500Mb 的内存使用量,并且垃圾收集的频率非常高。

起初我将此问题归咎于 Hibernate(如 this other question 中所示),但现在我不知道是什么导致了这种明显的高使用率。

我尝试使用 MAT 分析我的应用程序,这些是我的直方图结果:

Histogram Dominator tree

我在分析内存方面没有太多经验,大多数时候我感觉好像是在故障后查看汽车的引擎,但在我看来, char[] 引用与 spring 的内部“有关” bean 类数据库”。我对 spring 的 mvc 组件和事务使用基于注释的配置:

<tx:annotation-driven />
<context:annotation-config />

您是否发现这些值中的任何一个值特别高?你能帮我追踪问题吗?

PS。这是我对接近完整堆的堆转储的支配 enter image description here

最佳答案

您的两个问题(通常)都是正常的。

运行的垃圾收集器通常表明您正在进行大量处理,尤其是创建大量对象的处理(例如 jdbc)。除非您的服务器在垃圾收集期间变得无响应,否则无需担心。如果垃圾回收后没有返回到基线内存(锯齿形内存图的底部),则可能存在泄漏。

高内存使用率也是正常的,特别是如果您为生产 JVM 提供的内存多于本地 JVM 的内存。在尝试比较性能结果之前,比较您的启动参数并确保它们相同。

[我知道这并不是一个真正的答案,但它太长了,无法容纳评论]

关于java - Spring内存使用率过高,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21523266/

相关文章:

java - 如何使用自定义注释存储和加载加密值

java - 我需要实现一种方法,可以从值中获取键并删除方法

java - 从 Bundle 接收 null Parcelable 对象

java - 如何使用 Spring Batch 查看集群中的所有作业?

java - 提交后是否禁止 begin() 同一事务(事务重用)?

java - 将 native sql 转换为未映射的对象

java - 使用套接字同时发送多种类型

java - RESTful : What is the difference between ClientProperties. CONNECT_TIMEOUT 和 ClientProperties.READ_TIMEOUT 在 Jersey ?

java - 无法将类型 'java.lang.String' 的值转换为所需的模型对象类型

java - 使用 spring 在 java 中执行 google app engine 后端操作