野蝇 10 内存泄漏问题

我使用的是Wildfly 10.0.0 Final version。每当我取消部署/部署模块9-10次时,我都会得到wildfly的内存使用量不断缓慢增加,永远不会减少,它再次给出java.lang.OutOfMemoryError: GC overhead limit exceeded errorjava.lang.OutOfMemoryError: GC overhead limit exceeded error.

Wildfly 在取消部署应用程序后不会释放内存,并且在部署时不断增加,从而导致 GC 开销

早些时候,当我使用wildfly 9版本时,它没有给出这个问题。

我尝试了以下链接中给出的修复程序,将核心,servlet和websocket模块替换为最新版本,但它对我不起作用。

https://developer.jboss.org/message/959286

任何人都可以告诉我如何解决这个问题。


答案 1

您必须增加堆内存。为此

编辑配置文件,查找第一个出现的 .bin/standalone.confJAVA_OPTS

然后根据需要更改该选项。-Xmx

如果您使用 Java 8,则

改变:

JAVA_OPTS=”-Xms64m -Xmx512m -XX:MetaspaceSize=96M -XX:MaxMetaspaceSize=256m -Djava.net.preferIPv4Stack=true”

自:

JAVA_OPTS=”-Xms64m -Xmx2G -XX:MetaspaceSize=96M -XX:MaxMetaspaceSize=2G -Djava.net.preferIPv4Stack=true”

资源链接:

WildFly 10 — java.lang.OutOfMemoryError: Metadata space

更新:取消部署后未卸载类

马丁·库巴如下所述

  1. 取消部署并不一定意味着类卸载 - 它取决于JVM设置(-XX:MaxMetaspaceSize和Java8的朋友)
  2. 我已经验证了在附加的复制者的50个部署/取消部署周期之后(并使用-XX:MaxMetaspaceSize=128m):

对于 WildFly 10.0.0.最终出现“java.lang.OutOfMemoryError: Metaspace”

对于 WildFly 10.1.0-SNAPSHOT(修复了 WFLY-6347 的合并),没有发生 OOM 错误(元空间被垃圾回收)

在检查堆转储后,我已将 确定为根本原因。在这种情况下,它会保留对类的硬引用,从而有效地阻止GC中的相关ModuleClassLoader。org.jboss.el.cache.BeanPropertiesCacheperson.joey.test.TestClientBean

枚举值的处理方式与静态常量类似 - 即,除非所有者类的类加载器是,否则它不会被垃圾回收。

这就是值保留在内存中的原因。OmniFaces只会放大这种影响 - 如上所述,它引用了BeanManager。person.joey.test.RequestType


答案 2

推荐