我在Wildfly中遇到了元空间问题。
当前XX:MaxMetaspaceSize为256M。但是我在不同项目的多个服务器组中多次跟踪该问题(服务器组之间总共分配了50个项目)。并每天面对以下异常。
failed to define class: OutOfMemoryException: Metaspace
[大多数帖子(stackoverflow等)建议在使用wildfly的情况下应该为2GB。
但是我读过很多文章,建议在Java 8中不需要增加元空间:
In Java 8, the metaspace that holds your classes can expand without limit by default,
您能解决以下困惑吗?-如果Metaspace自动增加,并假设我设置了256,那么它不会自动增加吗?我将在2G网络中获得什么好处。
根据Oracle docs,在Java 8中,类元数据存储在本机内存中,默认情况下是无限的。 MaxMetaspaceSize
对用于类元数据的本机内存设置了上限。
如果还启用了UseCompressedOops
和UseCompressedClassesPointers
,则MaxMetaspaceSize
设置用于类元数据的本机内存两个区域的总和的上限-压缩类元数据的区域,以及所有其他类元数据。
另外,2GB听起来有点高。我会慢慢进行测试,以确保您将其设置为满足您的需求的最佳值。