问题标签 [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.
garbage-collection - 切换到 JDK 8 和 Tomcat 8 后的元空间问题
我面临 Meta 空间堆积的问题,即使在主要 GC 期间也没有清除。下面是我的 Tomcat JVM
(我正在使用具有 16GB RAM 的 AWS 实例运行)
我可以注意到元空间不断增加(高水位标记的变化),我觉得它在变化,因为分配的限制是 1 GB,当主要垃圾收集发生时,我期待未加载的类被卸载。但这不会发生。
在 15 分钟内,主要的主要垃圾一直在持续,堆空间看起来很健康(它清理了其中的对象),但元空间从来没有。所以我们必须重新启动Tomcat来解决这个问题。
我应该考虑 MinFreespaceRatio=60 吗?让 G1GC 诱导垃圾回收?
我打算
jmap -clstat
在生产实例上运行,我应该在那个元空间转储上看什么?
java - 在 java 6 中,我们将应用服务器 perm gen 大小设置为 2GB。java 8元空间中的等价物是什么
应用程序服务器:Jboss EAP 6
我们正在尝试将我们的应用程序从 Java 6 迁移到 Java 8。
在 Java 6 中 - perm gen 大小为 2 GB。
Java 8 中的 perm gen 等效(元空间)值是多少。
我设置了
这相当于 Java 6 中的 min permgen 2gb 吗?
java - 为什么 Java 会抛出 java.lang.OutOfMemoryError: Metaspace 但是有很多可用的元空间?
在我的应用程序中,我在运行时使用 javassist 库创建了许多 java 类。在某个时候java.lang.OutOfMemoryError: Metaspace
会抛出 a 但 java 进程监控(基于 java.lang.management.MemoryPoolMXBean)报告有大量可用的元空间。这是为什么?以及如何使用 100% 的元空间内存池?
我创建了一个重现问题的最小应用程序https://github.com/vlkv/java_metaspace_oom
下载它,cd 到项目目录,然后执行“ant run”。在这个应用程序中,我设置了 -XX:MaxMetaspaceSize=100m,但是 OOM 在某个点被抛出,大约使用了 23564Kb 的元空间。
错误的调用堆栈是:
java - 为什么垃圾收集日志元空间值与提供的标志不同?
我正在使用以下标志在 Java 8 上运行服务器应用程序:
元空间起始值为 512m,最大值为 1gb。
在 GC 日志中,我看到与上述标志值不同的元空间值。我的日志示例如下:
所以我的问题是:为什么我在 GC 日志中没有看到元空间的 512m 和 1gb 值?日志值是否与标志没有直接关系?
java - 为什么在tenured generation占50%,metaspace占98%的情况下FGC
JVM 版本
java 版本 "1.8.0_111"
Java(TM) SE Runtime Environment (build 1.8.0_111-b14)
Java HotSpot(TM) 64-Bit Server VM (build 25.111-b14, mixed mode)
JVM 内存使用如:
Heap
def new generation total 33216K, used 4K [0x00000000fa000000, 0x00000000fc400000, 0x00000000fc400000)
eden space 29568K, 0% used [0x00000000fa000000, 0x00000000fa001080, 0x00000000fbce0000)
from space 3648K, 0% used [0x00000000fc070000, 0x00000000fc070000, 0x00000000fc400000)
to space 3648K, 0% used [ 0x00000000fbce0000, 0x00000000fbce0000, 0x00000000fc070000)
终身代总数 61440K, 已使用 34490K [0x00000000fc400000, 0x0000000100000000, 0x00000000000000000000000000000
空间 61440K, 56% 已使用 [0x00000000fc400000, 0x00000000fe5aeaa8, 0x00000000fe5aec00, 0x0000000100000000)
已使用元空间 51022K, 容量 51693K, 承诺 57344K, 保留 57344K
JVM 参数是:
JAVA_OPTS="$JAVA_OPTS "-server" "-XX:+UseSerialGC" "-XX:+UseAdaptiveSizePolicy
JAVA_OPTS="$JAVA_OPTS "-Dcom.sun.management.jmxremote.port=31345" "-Djava.rmi .server.hostname=0.0.0.0" "-Dcom.sun.management.jmxremote.authenticate=false" "-Dcom.sun.management.jmxremote.ssl=false" "-Dcom.sun.management.jmxremote.ssl.need .client.auth=false" "-XX:+UnlockCommercialFeatures" "-XX:+FlightRecorder
JAVA_OPTS="$JAVA_OPTS"-XX:-UseCompressedClassPointers
JAVA_OPTS="$JAVA_OPTS"-XX:MaxMetaspaceSize=56m" "-XX:MarkStackSize= 32768" "-XX:MarkStackSizeMax=4194304" "-XX:SharedReadWriteSize=12582912" "-XX:StackShadowPages=3" "-XX:VMThreadStackSize=512
JAVA_OPTS="$JAVA_OPTS"-XX:InitialCodeCacheSize=48m""-XX:ReservedCodeCacheSize=48m""-XX:CompileThreshold=3000""-XX:+UseCodeCacheFlushing
JAVA_OPTS="$JAVA_OPTS"-Xms96m""-Xmx96m""- XX:NewRatio=2
JAVA_OPTS="$JAVA_OPTS -Xss256k -Xmn36m"
当前 gc 日志为:
23636.561:[Full GC (Last ditch collection) 23636.561:[Tenured:34568K->34568K(61440K),0.1815189 秒]34568K->34568K(94656K),[元空间:511117344K->51111K)] , 0.1816524 secs] [Times: user=0.17 sys=0.00, real=0.18 secs]
23636.744: [Full GC (Metadata GC Threshold) 23636.744: [Tenured: 34568K->34609K(61440K), 0.18111110 secs] 09K>7(347) 94656K),[元空间:51111K->51111K(57344K)],0.1813034 秒] [时间:用户 = 0.18 系统 = 0.00,实际 = 0.18 秒]
23636.926:[完整 GC(最后一次沟渠收集)23636.926:[终身:34609K- >34609K(61440K), 0.1731652 秒] 34609K->34609K(94656K), [元空间: 51111K->51111K(57344K)], 0.1734136 秒] [时间: user=0.17 sys=0.00, real=0.18 secs]
23637.100:[Full GC(元数据 GC 阈值)23637.101:[Tenured:34609K->34567K(61440K),0.1757107 秒] 34667K->34567K(94656K),[元空间:51111K->2)51111K(7539 秒] 40。时间:user=0.16 sys=0.00, real=0.17 secs]
23637.276: [Full GC (Last ditch collection) 23637.276: [Tenured: 34567K->34567K(61440K), 0.1675901 secs] 34567K->34567K(94656K),Metaspace : 51111K->51111K(57344K)], 0.1677021 secs] [Times: user=0.16 sys=0.00, real=0.17 secs]
23637.447: [Full GC (Metadata GC Threshold) 23637.447: [Tenured: 34567K->34667K(6) , 0.1613939 秒] 35383K->34667K(94656K), [元空间: 51117K->51117K(57344K)], 0.1615529 秒] [时间: user=0.16 sys=0.00, real=0.16 secs]
23637.609:[完整 GC(最后一次 ditch 收集)23637.609:[终身:34667K->34667K(61440K),0.1629309 秒] 34667K->34667K(94656K),[元空间:51117K->51117K(57334K)] 3 秒] [16316K]。时间:user=0.15 sys=0.00, real=0.17 secs]
Jstat status check is:
1)./jdk1.8.0_111/bin/jstat -gc 3013 1000 5
S0C S1C S0U S1U EC EU OC OU MC MU CCSC CCSU YGC YGCT FGC FGCT GCT
3648.0 3648.0 0.0 0.0 29568.0 41.8 61440.0 35100.7 57344.0 51127.3 0.0 0.0 391 2.904 105988 17121.850 17124.755
3648.0 3648.0 0.0 0.0 29568.0 562.5 61440.0 35049.7 57344.0 51127.3 0.0 0.0 391 2.904 105994 17122.837 17125.742
3648.0 3648.0 0.0 0.0 29568.0 155.8 61440.0 35539.3 57344.0 51123.7 0.0 0.0 391 2.904 106000 17123.893 17126.797
3648.0 3648.0 0.0 0.0 29568.0 0.0 61440.0 35272.7 57344.0 51123.7 0.0 0.0 391 2.904 106005 17124.776 17127.681
3648.0 3648.0 0.0 0.0 29568.0 0.0 61440.0 35269.9 57344.0 51123.7 0.0 0.0 391 2.904 106011 17125.791 17128.696
2)./jdk1.8.0_111/bin/jstat -class 3013 1000 5
Loaded Bytes Unloaded Bytes Time
23996 38866.6 15278 22602.0 2294.53
23996 38866.6 15278 22602.0 2294.53
23997 38868.1 15279 22603.6 2294.53
23997 38868.1 15279 22603.6 2294.53
23997 38868.1 15279 22603.6 2294.53
java - 如果您没有在 java 8 rcp 应用程序中指定 maxmetaspace 参数会发生什么?
如果您在没有指定 jvm 参数 MaxMetaspaceSize 和 metaspacesize 的情况下启动并使用重型 java 8 rcp 桌面应用程序会发生什么?
堆内存消耗的内存几乎和非堆(元空间)消耗一样正常吗?
最后一个问题:不指定元空间大小参数会导致应用程序崩溃吗?
java - OutOfMemoryError:没有内存池的元空间被最大化
看起来我们在实际用完该池的可用内存之前遇到了 OutOfMemoryError: Metaspace。
更具体地说,一旦该池的承诺量达到最大值,我们似乎就遇到了该错误,而不是在使用量达到最大值时。
这是设置:
我们有一个在 Oracle Java 8 update 121 上运行的 Jenkins 服务器,并且有以下元空间参数-XX:MetaspaceSize=10G -XX:MaxMetaspaceSize=10G
。我们还有 Datadog 监控堆和非堆池。
我们遇到了一个问题,即 Jenkins 日志表明某个线程抛出了 OutOfMemoryError: Metaspace。然而,在事件发生时的 Datadog 中,使用的非堆数量非常低(下图)。
起初我认为 Datadog 可能测量错误,但使用 jconsole 我得到了当前使用情况的匹配结果(事件发生时我没有打开 jconsole)。
我唯一的另一个结论是,错误源于尝试分配更多已提交的元空间,即使这与已使用量之间仍有很大差距。
我是否遗漏了有关这些内存池应该如何工作的信息?
注意:我完全知道这是一个非常大的元空间,而且我们可能在某个地方有类加载器泄漏。这是我们在尝试调查该泄漏时遇到的问题。
java - JVM 内存中的元空间和运行时常量池在哪里?
我对 Java 中的元空间感到困惑。它在哪里?一些文章将 PermGen(Metaspace) 视为堆的一部分,其中一些视为内存的堆外部分:
方法区(元空间的一部分)在这里是堆的一部分:http: //javapapers.com/core-java/java-jvm-run-time-data-areas/
这不是: http ://blog.jamesdbloom.com/JVMInternals.html
我对运行时常量池也有同样的问题。有些文章将其视为堆的一部分,有些则将其视为方法区的一部分。
它取决于 JVM 的实现,或者只是在 Java 发布期间发生的变化(并且文章是旧的)?如果是关于 JVM 的实现,它在 HotSpot 中是如何工作的?
谢谢!
java-8 - 如何刷新软引用以避免元空间 OOM?
我在 JDK 中面临 Metaspace OOM。有这么多的 SoftRefence 自定义类加载器应该在 Metaspace OOM 之前被刷新,但不知道为什么它没有发生?
有什么方法可以刷新 JDK8 元空间中的 SoftReferences?