【发布时间】:2015-04-02 17:41:08
【问题描述】:
我正在使用 Tomee、Primefaces 5.0 和 Apache SHiro。
当我启动服务器时,它会消耗 600 Mb 的内存。 如果我打开和关闭某个页面,该页面包含大量信息,但与 ViewScoped bean 相关,则内存使用量为 1.6 GiB。如果我打开其他东西,即使是 RequestScopped bean,也会发生同样的事情。 我已经检查并调用了 PreDestroy 方法,所以不是我的问题。
使用 Eclipse 内存分析器:
“org.apache.openejb.core.WebContext”的一个实例由加载 “org.apache.catalina.loader.StandardClassLoader@0xa34f0cf0”占用 1,189,717,200 (97.83%) 字节。记忆累积在一 “java.util.concurrent.ConcurrentHashMap$Segment[]”的实例已加载 通过“系统类加载器”。
关键字 java.util.concurrent.ConcurrentHashMap$Segment[] org.apache.openejb.core.WebContext org.apache.catalina.loader.StandardClassLoader @ 0xa34f0cf0
当我运行 shutdown.sh 时,我在 catalina.out 中有以下内容
org.apache.catalina.loader.WebappClassLoader checkThreadLocalMapForLeaks SEVERE:Web 应用程序 [/projeto-bim] 创建了一个具有类型键的 ThreadLocal [org.apache.shiro.util.ThreadContext.InheritableThreadLocalMap](值 [org.apache.shiro.util.ThreadContext$InheritableThreadLocalMap@5720d785]) 和 [java.util.HashMap] 类型的值(值 [{org.apache.shiro.util.ThreadContext_SECURITY_MANAGER_KEY=org.apache.shiro.web.mgt.DefaultWebSecurityManager@2d258973, org.apache.shiro.util.ThreadContext_SUBJECT_KEY=org.apache.shiro.web.subject.support.WebDelegatingSubject@7b62f42c}])但在 Web 应用程序停止时未能将其删除。线程 将随着时间的推移而更新,以尽量避免可能的记忆 泄漏。
我尝试了几件事,例如在 web.xml 中设置一些配置以仅维护一个会话或设置 Tomee 以将会话信息保存在磁盘上,但没有任何效果。
我该怎么办?
// 新信息: 内存达到 1.6 GiB 并停止,因为这是我的最大堆空间。 Web 服务器开始抛出 OutOfMemoryError。我会尝试增加它以查看它使用了多少。
好的。现在我将 java 堆空间增加到 3 GB。我的应用程序全部使用了它。显然是内存泄漏,因为每次打开某个页面,其中包含大量信息,内存就增加了 300 Mb,并且从未减少! 我能做什么?
【问题讨论】:
标签: java jakarta-ee primefaces memory-leaks apache-tomee