您必须增加堆内存。为此
编辑配置文件,查找第一个出现的 .bin/standalone.conf
JAVA_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
马丁·库巴如下所述
- 取消部署并不一定意味着类卸载 - 它取决于JVM设置(-XX:MaxMetaspaceSize和Java8的朋友)
- 我已经验证了在附加的复制者的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.BeanPropertiesCache
person.joey.test.TestClientBean
枚举值的处理方式与静态常量类似 - 即,除非所有者类的类加载器是,否则它不会被垃圾回收。
这就是值保留在内存中的原因。OmniFaces只会放大这种影响 - 如上所述,它引用了BeanManager。person.joey.test.RequestType