ConnectionQueueStatsProvider出现内存不足错误

时间:2013-12-02 04:46:51

标签: java jvm heap out-of-memory concurrenthashmap

我们上周在生产环境中遇到了内存不足的错误。这种内存不足错误可能每周发生一次,当前的解决方法是重新启动应用程序服务器。我们正在使用glassfish 3.0.1。生成的堆转储大约为5GB。

请帮助分析下面的堆转储。这是使用eclipse MAT生成的泄漏嫌疑人报告。我们如何分析以下报告?

One instance of 
"com.sun.enterprise.v3.services.impl.monitor.stats.ConnectionQueueStatsProvider" loaded by 
"org.apache.felix.framework.ModuleImpl$ModuleClassLoader @ 0x602650970" occupies 
2,104,143,312 (87.97%) bytes. The instance is referenced by 
org.glassfish.flashlight.impl.client.ReflectiveClientInvoker @ 0x600a63768 , loaded by 
"org.apache.felix.framework.ModuleImpl$ModuleClassLoader @ 0x60265dd38". The memory is 
accumulated in one instance of "java.util.concurrent.ConcurrentHashMap$Segment[]" loaded 
by "<system class loader>".

Keywords
org.apache.felix.framework.ModuleImpl$ModuleClassLoader @ 0x602650970
org.apache.felix.framework.ModuleImpl$ModuleClassLoader @ 0x60265dd38
java.util.concurrent.ConcurrentHashMap$Segment[]
com.sun.enterprise.v3.services.impl.monitor.stats.ConnectionQueueStatsProvider

shortest paths to accumulation point accumulated objects

4 个答案:

答案 0 :(得分:0)

请检查您的函数调用流,因为您没有关闭一旦打开创建内存泄漏的数据库连接

请参阅此对话以获取进一步的参考Database connections and OutOfMemoryError: Java Heap Space

答案 1 :(得分:0)

很难用这么少的信息分析原因。

根据该报告,它可能是数据库连接问题。

TRY:

  • 确认ConnectionQueueStatsProvider所持有的内容(可能是java.util.concurrent.ConcurrentHashMap $ Segment [])。

  • 打开源代码,找出ConnectionQueueStatsProvider's ConcurrentHashMap中的内容。


如果java.util.concurrent.ConcurrentHashMap $ Segment []标记了大部分空间,那么你的应用可能会遇到数据库连接问题。

Java.util.concurrent.ConcurrentHashMap只是ConnectionQueueStatsProvider中的一种用法:

66  private final Map<Integer, Long> openConnectionsCount = new ConcurrentHashMap<Integer, Long>();

尝试检查代码并关闭数据库连接。

答案 2 :(得分:0)

嗯,MAT在这里非常明显。您有一个ConnectionQueueStatsProvider实例,它有一个巨大的openConnectionsCount映射。看来你不断填写这张地图,但绝不会从中删除任何东西。如果我看过一个内存泄漏:)

将来,您可能会对Plumbr感兴趣,{{3}}是为了找到这些问题而创建的,只需要更少的工作量。

答案 3 :(得分:0)

我们认为我们找到了答案。我们在glassfish jira中看到了一个类似的错误:https://java.net/jira/browse/GLASSFISH-16254。这似乎是glassfish 3.0.1的一个错误。

当启用了线程池和http服务的glassfish监视时,它们出现内存不足错误,这是我们的确切设置。

我们关闭了玻璃鱼监测,现在我们运行稳定1周,没有任何内存不足。

感谢大家的帮助!