【发布时间】:2014-08-13 02:09:17
【问题描述】:
我编写了一个在 linux 服务器上运行 java 的服务器端应用程序。 我使用休眠打开数据库会话,使用本机 sql 查询它,并始终通过 try、catch、finally 关闭此会话。
我的服务器以非常高的频率使用休眠查询数据库。
我已经将 MaxHeapSize 定义为 3000M,但它通常在 RAM 上使用 2.7GB,它可以减少但比增加慢。有时它会增长到 3.6GB 的内存使用量,超过我在启动时定义的 MaxHeapSize。
当使用的内存为 3.6GB 时,我尝试使用 -jmap 命令转储它并得到一个大小仅为 1.3GB 的 heapdump。
我用eclipse MAT分析一下,这里是MAT的支配树 我认为休眠是问题所在,我有很多这样的 org.apache.commons.collections.map.AbstractReferenceMap$ReferenceEntry。它可能无法通过垃圾回收处理,或者可以但很慢。
我该如何解决?
【问题讨论】:
标签: java hibernate memory-leaks out-of-memory heap-dump