Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/303.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 元空间内存不足,甚至有20-30%或更多的可用空间_Java_Jboss_G1gc_Metaspace - Fatal编程技术网

Java 元空间内存不足,甚至有20-30%或更多的可用空间

Java 元空间内存不足,甚至有20-30%或更多的可用空间,java,jboss,g1gc,metaspace,Java,Jboss,G1gc,Metaspace,使用Java8运行的KeyClope/JBoss服务器被切换到G1GC,并且-XX:MaxMetaspaceSize被设置为256MB。它很快停止响应,日志中充满了OutOfMemory:Metaspace错误。未启用GC日志。服务器连接了Dynatrace监控服务,显示了大量可用的metapsace 在一次分配的256MB中使用了191MB。 在第二次出现时分配的256MB中使用了165MB 我知道为了释放元空间,调用了GC,但由于无法释放足够的空间,它在一个接一个地运行GC,因此进程被卡住的

使用Java8运行的KeyClope/JBoss服务器被切换到G1GC,并且
-XX:MaxMetaspaceSize
被设置为256MB。它很快停止响应,日志中充满了OutOfMemory:Metaspace错误。未启用GC日志。服务器连接了Dynatrace监控服务,显示了大量可用的metapsace

在一次分配的256MB中使用了191MB。 在第二次出现时分配的256MB中使用了165MB


我知道为了释放元空间,调用了GC,但由于无法释放足够的空间,它在一个接一个地运行GC,因此进程被卡住的原因是有道理的。然而,我无法理解的是,为什么进程在大量空闲时也会耗尽元空间。没有提供其他JVM参数(XMS/XMX除外)。所有堆内存段都有足够的可用空间。是否有人试图在元空间中分配60MB+的空间?这是唯一可能的原因吗?

另一个原因可能是您查看的是平均值,而不是最大值。将元空间度量添加到自定义图表中,并确保选择“最大”聚合。可能此时值更接近最大值。是否启用了
UseCompressedClassesPointers
?如果是这样,那么MaxMetaspaceSize=的提交大小(元空间+压缩类空间)。您可能不会显式设置它,但如果启用了
UseCompressedOops
,则默认情况下会启用它。所以,请检查您的配置。@rmunge这是可能的,但dynatrace中显示的使用的mataspace大小是一致的,这使我认为它没有增长或收缩。@suv3ndu这很有趣,因为UseCompressedOops确实包含在JVM参数中。是否有任何文档/参考文件对此进行了解释?@Harisumshtaq请参阅以了解详细信息。