问题标签 [metaspace]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
0 回答
69 浏览

java - 使用 TransformerFactory 的 XSLT Transformer 增加元空间

当我使用多个不同的请求运行以下代码时,java 元空间正在增加。

你能解释一下幕后发生的事情吗?为什么 java 元空间越来越大?

0 投票
1 回答
159 浏览

java-8 - Wildfly 16:在 Java8 中更改 XX:MaxMetaspaceSize 有什么好处?

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

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

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

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

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

0 投票
1 回答
142 浏览

java - 类加载器或类可以在 JVM 中死掉吗?

类加载器或类可以在 JVM 中死掉吗?我正在阅读一篇博客Oracle-垃圾收集和元空间。作者写道,当达到最大大小时,会在元空间上引发垃圾收集,结果死类加载器和类被垃圾收集

我想了解像对象变得无法访问一样是否也可以应用于类加载器和类?如果是,那么如何。

0 投票
0 回答
1115 浏览

java - 为什么即使 Metaspace 未填满,JVM 也会因“java.lang.OutOfMemoryError: Metaspace”而崩溃?

我目前正在调查一个有趣的“java.lang.OutOfMemoryError: Metaspace”问题。我认为它“有趣”的原因是因为元空间使用量远小于最大元空间大小(1GB)。堆和 GC 配置是:

以下是 JVM 崩溃前的最后 6 次 GC 事件:

如果您查看最后一次元空间使用情况,大约是 ~328MB: [Metaspace: 336962K->328764K(620544K)]

根据Java doc:“MaxMetaspaceSize 适用于提交的压缩类空间和其他类元数据空间的总和。”。我还检查了压缩类空间的使用情况,大约是 50MB。

我检查了虚拟内存的使用情况。没有短缺。这就是我感到困惑的地方。如您所见,Metaspace 的使用率小于 MaxMetaspaceSize 的 50%,那么为什么 JVM 正在执行“Last ditch collection”并运行到 OOM?我遇到了一些 JDK 错误吗?也不是那些“一次性”的情况,它每月发生一次/两次。我不确定我是否遗漏了什么,有人可以分享他们的想法吗?

0 投票
1 回答
834 浏览

java - 删除生产服务器中的 MaxMetaspaceSize ("-XX:MaxMetaspaceSize=1g") 参数导致另一个错误:堆内存不足错误

在我的服务器中,我总共有 16GB 内存。JVM 最大内存 (Xmx) 分配为 12GB。在 JVM 中,我们正在运行 WSO2 ESB。我们已经MaxMetaspaceSize=1g在 J​​VM 中设置了。这经常给我们以下错误。

然后我们MaxMetaspaceSize=1g从 JVM 中删除了参数。然后我们在 JVM 中出现了以下两个错误,并且我们在应用程序中也遇到了缓慢的问题。

摆脱初始元空间错误的可能解决方案是什么?

0 投票
1 回答
319 浏览

java - 分配的元空间大于 MaxMetaspaceSize

在 Java 8 中,我在我的服务上运行 GC log,通过 GCeasy 我看到元空间分配了 1GB,而峰值在 40m 左右,那么为什么分配了 1GB?

我使用这些标志并添加了“-XX:MaxMetaspaceSize=10M”。

然后我得到了 java.lang.OutOfMemoryError: Metaspace,正如预期的那样,但仍然在 GC 日志上我看到分配了 1 GB。日志中有错误吗?或者我错过了一些东西。

我在 GC 日志文件上运行 grep Metaspace 并得到以下输出:

命令行标志:-XX:CompressedClassSpaceSize=2097152 -XX:+DisableExplicitGC -XX:GCLogFileSize=104857600 -XX:InitialHeapSize=536870912 -XX:MaxHeapGCSize=536870912 -XX:MaxMetaspaceSize=10485760 -XX:MetaspaceSize =10485760 -XX :NumbersOf=10485760 -XX:+PrintGC -XX:+PrintGCApplicationConcurrentTime -XX:+PrintGCApplicationStoppedTime -XX:+PrintGCDateStamps -XX:+PrintGCDetails -XX:+PrintGCTimeStamps -XX:ReservedCodeCacheSize=134217728 -XX:+UseCompressedClassPointers -XX:+UseCompressedOops -XX:+ UseGCLogFileRotation -XX:+UseParallelGC

2020-05-19T16:38:18.359+0000:0.837:[完整 GC(元数据 GC 阈值)[PSYoungGen:7298K->0K(153088K)][ParOldGen:8K->6944K(349696K)]7306K->6944K(502784K) ), [元空间: 9975K->9975K(1058816K)], 0.0249384 secs] [Times: user=0.08 sys=0.01, real=0.02 secs]

2020-05-19T16:38:18.386+0000:0.864:[完整 GC(元数据 GC 阈值)[PSYoungGen:0K->0K(153088K)][ParOldGen:6944K->6944K(349696K)]6944K->6944K(502784K) ), [元空间: 9975K->9975K(1058816K)], 0.0129850 secs] [Times: user=0.04 sys=0.00, real=0.01 secs]

2020-05-19T16:38:18.400+0000: 0.879: [Full GC (Last ditch collection) [PSYoungGen: 0K->0K(153088K)] [ParOldGen: 6944K->6816K(349696K)] 6944K->6816K(502784K) ), [元空间: 9975K->9965K(1058816K)], 0.0252318 secs] [Times: user=0.07 sys=0.00, real=0.03 secs]

0 投票
1 回答
1260 浏览

java - 为什么 Java 上默认的 MaxMetaspaceSize 非常大?

我通过打印 JVM 参数检查了 JVM 上的默认 MaxMetaspaceSize,如下所示

鉴于这些 JVM 参数值以字节为单位显示,默认的 MaxMetaspaceSize 约为 18 Exabytes!

有人可以解释为什么默认的 MaxMetaspaceSize 值这么大吗?

0 投票
1 回答
68 浏览

java - 内存中的内部类在哪里?

我们知道一个类通常被加载到元空间中,但是非静态内部类呢?加载后它去了哪里?

什么时候会加载这个类?它会和外部类一样被加载还是延迟到一个实例被请求?而且,同样的问题,他们将被卸载?

0 投票
2 回答
341 浏览

tomcat - Java 非堆无限增加

我们正在开发一个仍处于非生产状态的新应用程序。我们正在使用 java 8。我们面临的问题是非堆逐渐增加,几天后它会导致 linux 系统崩溃。

我们的应用程序在 tomcat 上运行,我们使用自动部署方法。作为故障排除的一部分,我们进行了以下测试。

XMX = 4GB

  1. 重新启动 Tomcat 以重新开始。应用程序以以下统计信息开始

    • 堆使用量 = 1.5gb
    • 非堆 = 200mb
  2. 在 tomcat 重启后没有任何用户测试,我们进行了自动部署,同样的代码再次部署,发现非堆增加了一倍。

    • 堆使用量 = 1.5gb
    • 非堆 = 400mb

我们多次重复部署,每次,非堆都会增加。不仅仅是部署,而且只是启动/停止应用程序(不是 tomcat)也会将非堆增加 200mb。

基本上,我们将问题范围缩小到,当我们进行部署时,非堆会增加。需要注意的重要一点是我们不会在自动部署期间重新启动 tomcat。我正在寻找关于我是否应该在每次部署后包含 tomcat 重启步骤的建议?或者我应该包含 XX:MaxMetaspaceSize 参数以将阈值设置为非堆?

我们一直在监控我们的常规堆使用情况,没有任何问题。垃圾收集定期发生并回收空间。但是对于 NON-HEAP,情况并非如此,即使发生 GC,也不会从 NON-heap 回收空间。

0 投票
1 回答
97 浏览

java - 为什么我的 JVM 在启动时做了 3 次 FullGC

我的工作是 Flink TaskManager 工作。当它启动时,它会启动 3 次 GC。我不知道为什么当它达到 MetadataGCThreshold 时,它增加了 Tenured Space,而 Metaspace 没有改变,甚至在 GC 之间增加。

我认为 FullGC 会减少 Tenured Space 和 Metaspace 的一些空间。

==================================================== =============== 由于斯蒂芬的回答,我将 MetaSpace 的 initialSize 设置为-XX:MetaspaceSize=134217728. 我开始工作两次,第二次使用这个 jvm 参数。没有 FullGC 因为Metadata GC Threshold.