我使用的是Tomee,PrimeFaces5.0和Apache SHiro。
当我启动服务器时,它消耗了600 Mb的内存。如果我打开和关闭某个页面,该页面包含大量信息,但与ViewScoped bean相关,则内存使用量为1,6 GiB。如果我打开其他东西,甚至打开RequestScopped bean,也是一样的。我已经检查并调用了PreDestroy方法,所以我的问题不是。
使用Eclipse内存分析器:
"org.apache.catalina.loader.StandardClassLoader @ 0xa34f0cf0“加载的"org.apache.openejb.core.WebContext”的一个实例占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严厉: web应用程序/projeto创建了一个具有org.apache.shiro.util.ThreadContext.InheritableThreadLocalMap类型键和java.util.HashMap类型值的ThreadLocal,但在web应用程序停止时未能将其删除。线程将随着时间的推移而更新,以避免可能的内存泄漏。
我尝试了几种方法,比如在web.xml中设置一些配置以只维护一个会话,或者设置Tomee将会话信息保存在磁盘上,但是没有什么效果。
我该怎么办?
// :内存为1.6 GiB并停止,因为这是我的最大堆空间。web服务器开始抛出OutOfMemoryError。我将尝试增加这个值,看看它使用了多少。
好的。现在,我将java堆空间增加到3GB。我的应用程序全部使用了。这显然是一个内存泄漏,因为每次我打开某个页面,其中包含了大量的信息,内存增加了300 Mb,而且它永远不会减少!我能做什么?
发布于 2015-02-03 14:05:45
我看不出有什么与泄密有关的事。
WebContext绑定到TomEE中的see应用程序(正常情况下,当应用程序运行时会看到它)
然后,所有的警告都是apache在您的webapp中,并且使用了线程本地来保持线程的安全上下文。因为它是由was应用程序加载的,它可以创建漏洞,但除了修补衬衫之外,您也无法控制它。
https://stackoverflow.com/questions/28300404
复制