内存泄漏 org.jboss.modules.ModuleClassLoader。内存在 java.util.concurrent.ConcurrentHashMap 的一个实例中累积(在 wildfly 上)
Memory leak org.jboss.modules.ModuleClassLoader. The memory is accumulated in one instance of java.util.concurrent.ConcurrentHashMap (on wildfly)
我正在升级 JBoss、java 和休眠版本
JBoss6转野蝇11
休眠 4 到休眠 5.1
和java 6至java 8
但是我在 java 堆上遇到了这个问题,79% 的内存被 ConcurrentHashMap 对象占用,我做了一个堆转储并使用 eclipse 分析器,我看到了主要错误来自这个错误
"The classloader/component "org.jboss.modules.ModuleClassLoader@0x6c27d1230”占用2.877.603.336(79,10%)字节。内存是在"system class loader"加载的"java.util.concurrent.ConcurrentHashMap$Node[]"的一个实例中累积的.
如果我看到细节,Dominator Tree 中的 Accumulated Objects 会显示:
org.jboss.modules.ModuleClassLoader -> 2.877.603.336 (Retained Heap)
-java.util.Vector @ 0x6c27d4db0 -> 2.877.123.872 (Retained Heap)
--java.lang.Object[20480] -> 2.877.123.840 (Retained Heap)
---class org.hibernate.internal.SessionFactoryRegistry -> 2.840.910.848 (Retained Heap)
-----org.hibernate.internal.SessionFactoryRegistry -> 2.840.910.168 (Retained Heap)
------java.util.concurrent.ConcurrentHashMap -> 2.840.909.848 (Retained Heap)
-------java.util.concurrent.ConcurrentHashMap$Node[256]-> 2.840.909.784 (Retained Heap)
我真的不明白为什么会出现这种情况,因为使用旧技术,没有一种会出现这种情况。
SessionFactoryRegistry 跟踪您的应用程序创建的 SessionFactory。通常您只需要一个 SessionFactory,创建一个的成本很高。
通常 SessionFactory 在启动时被初始化并且 Session 对象被自动注入。有多种方法可以实现,但您可以从 here
开始
最后是代码中的一个错误,每次我有一个 NOT_ACTIVE 状态时我都有一个 "reconnect",这个重新连接建立新的连接并在应用程序中产生内存泄漏.
删除此重新连接并排除 NOT_ACTIVE 状态是此问题的解决方案。
我正在升级 JBoss、java 和休眠版本
JBoss6转野蝇11
休眠 4 到休眠 5.1
和java 6至java 8
但是我在 java 堆上遇到了这个问题,79% 的内存被 ConcurrentHashMap 对象占用,我做了一个堆转储并使用 eclipse 分析器,我看到了主要错误来自这个错误
"The classloader/component "org.jboss.modules.ModuleClassLoader@0x6c27d1230”占用2.877.603.336(79,10%)字节。内存是在"system class loader"加载的"java.util.concurrent.ConcurrentHashMap$Node[]"的一个实例中累积的.
如果我看到细节,Dominator Tree 中的 Accumulated Objects 会显示:
org.jboss.modules.ModuleClassLoader -> 2.877.603.336 (Retained Heap)
-java.util.Vector @ 0x6c27d4db0 -> 2.877.123.872 (Retained Heap)
--java.lang.Object[20480] -> 2.877.123.840 (Retained Heap)
---class org.hibernate.internal.SessionFactoryRegistry -> 2.840.910.848 (Retained Heap)
-----org.hibernate.internal.SessionFactoryRegistry -> 2.840.910.168 (Retained Heap)
------java.util.concurrent.ConcurrentHashMap -> 2.840.909.848 (Retained Heap)
-------java.util.concurrent.ConcurrentHashMap$Node[256]-> 2.840.909.784 (Retained Heap)
我真的不明白为什么会出现这种情况,因为使用旧技术,没有一种会出现这种情况。
SessionFactoryRegistry 跟踪您的应用程序创建的 SessionFactory。通常您只需要一个 SessionFactory,创建一个的成本很高。 通常 SessionFactory 在启动时被初始化并且 Session 对象被自动注入。有多种方法可以实现,但您可以从 here
开始最后是代码中的一个错误,每次我有一个 NOT_ACTIVE 状态时我都有一个 "reconnect",这个重新连接建立新的连接并在应用程序中产生内存泄漏.
删除此重新连接并排除 NOT_ACTIVE 状态是此问题的解决方案。