0

我在 Wildfly 中遇到元空间问题。

目前 XX:MaxMetaspaceSize 为 256M。但是我在不同项目的多个服务器组中多次遇到以下问题(总共 50 个项目分布在服务器组中)。并且每天都面临以下异常。

failed to define class: OutOfMemoryException: Metaspace

大多数帖子(stackoverflow 和其他)建议它应该是 2GB,以防万一。

但是我在各种文章中读到了这些文章,这些文章表明在 Java 8 中不需要增加 Metaspace:

In Java 8, the metaspace that holds your classes can expand without limit by default,

您能否解决这个困惑 - 如果 Metaspace 自动增加并且假设我设置了 256 那么它不会自动增加吗?我将在 2G 获得什么好处。

4

1 回答 1

1

根据Oracle 文档,在 Java 8 中,类元数据存储在本机内存中,默认情况下是无限的。MaxMetaspaceSize对用于类元数据的本机内存设置上限。

如果您还拥有UseCompressedOopsUseCompressedClassesPointers启用,则MaxMetaspaceSize设置用于类元数据的两个本地内存区域之和的上限 - 压缩类元数据的区域和所有其他类元数据的区域。

此外,2GB 听起来有点高。我会慢慢增加并进行测试,以确保您将其设置为满足您需求的最佳值。

于 2020-01-03T07:25:06.957 回答