Wildfly 10内存泄漏问题

kir*_*rti 12 java garbage-collection memory-leaks wildfly-10

我正在使用wildfly 10.0.0最终版本.我得到java.lang.OutOfMemoryError: GC overhead limit exceeded error每当我取消部署/部署模块9-10倍也wildfly的内存使用量不断增长缓慢和不减少,并再次使java.lang.OutOfMemoryError: GC overhead limit exceeded error.

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

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

通过用最新版本替换core,servlet和websocket模块,我尝试了下面链接中给出的修复,但它对我没有用.

https://developer.jboss.org/message/959286
Run Code Online (Sandbox Code Playgroud)

谁能告诉我如何解决这个问题.

Sky*_*ker 21

你必须增加你的堆内存.为了这

编辑bin/standalone.conf配置文件,查找第一次出现的JAVA_OPTS.

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

如果你使用Java 8,那么

更改:

JAVA_OPTS=”-Xms64m -Xmx512m -XX:MetaspaceSize=96M -XX:MaxMetaspaceSize=256m -Djava.net.preferIPv4Stack=true”
Run Code Online (Sandbox Code Playgroud)

至:

JAVA_OPTS=”-Xms64m -Xmx2G -XX:MetaspaceSize=96M -XX:MaxMetaspaceSize=2G -Djava.net.preferIPv4Stack=true”
Run Code Online (Sandbox Code Playgroud)

资源链接:

WildFly 10 - java.lang.OutOfMemoryError:元数据空间

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

Martin kouba在下面说

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

对于WildFly 10.0.0.Final"java.lang.OutOfMemoryError:Metaspace"发生

for WildFly 10.1.0-SNAPSHOT(修复WFLY-6347合并)没有发生OOM错误(元空间被垃圾收集)

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

枚举值与静态常量类似 - 即除非所有者类的类加载器,否则它不会被垃圾收集.

这就是person.joey.test.RequestType价值观留在记忆中的原因.OmniFaces只会放大影响 - 如上所述,它拥有对BeanManager的引用.

  • 我完全不同意.它只会延迟OutOfMemoryError,它将在某些部署后出现.可能这是一个错误...我知道的唯一解决方案是在部署之前重启Wildfly. (3认同)