为什么这里会发生CMS(并发模式失败)?

2023-12-08

Operation System: Red Hat Linux 4.8

CPU Info: Intel(R) Xeon(R) CPU 5160  @ 3.00GHz  X 16

JDK version: "1.5.0_16" 

JVM Parameter:
-server 
-Xmx1024m 
-Xms1024m 
-XX:NewSize=256m 
-XX:MaxNewSize=256m 
-XX:PermSize=128m 
-XX:MaxPermSize=128m 
-XX:SurvivorRatio=8 
-XX:+PrintGCDetails 
-XX:+PrintGCTimeStamps 
-XX:+UseConcMarkSweepGC 
-XX:+UseCMSCompactAtFullCollection 
-XX:CMSFullGCsBeforeCompaction=5 
-XX:CMSInitiatingOccupancyFraction=60 
-XX:CMSMaxAbortablePrecleanTime=5 
-XX:+CMSPermGenSweepingEnabled 
-XX:+CMSClassUnloadingEnabled 
-XX:MaxGCPauseMillis=1500 

JVM GC Log:

945188.489: [GC 945188.489: [ParNew: 224543K->14968K(235968K), 0.0506680 secs] 552200K->344514K(1022400K), 0.0507700 secs] 

945242.102: [GC 945242.102: [ParNew: 224760K->15374K(235968K), 0.0632410 secs] 554306K->346710K(1022400K), 0.0633450 secs] 

945270.397: [GC 945270.402: [ParNew: 225163K->225163K(235968K), 0.0000230 secs]945270.402: [CMS (concurrent mode failure)[Unloading class sun.reflect.GeneratedSerializationConstructorAccessor70] 
[Unloading class sun.reflect.GeneratedSerializationConstructorAccessor58] 
[Unloading class sun.reflect.GeneratedSerializationConstructorAccessor38] 
[Unloading class sun.reflect.GeneratedSerializationConstructorAccessor62] 
[Unloading class sun.reflect.GeneratedSerializationConstructorAccessor54] 
[Unloading class sun.reflect.GeneratedSerializationConstructorAccessor74] 
[Unloading class sun.reflect.GeneratedSerializationConstructorAccessor53] 
[Unloading class sun.reflect.GeneratedSerializationConstructorAccessor73] 
[Unloading class sun.reflect.GeneratedSerializationConstructorAccessor64] 
[Unloading class sun.reflect.GeneratedSerializationConstructorAccessor39] 
[Unloading class sun.reflect.GeneratedSerializationConstructorAccessor59] 
[Unloading class sun.reflect.GeneratedSerializationConstructorAccessor51] 
[Unloading class sun.reflect.GeneratedSerializationConstructorAccessor42] 
[Unloading class sun.reflect.GeneratedSerializationConstructorAccessor48] 
[Unloading class sun.reflect.GeneratedSerializationConstructorAccessor76] 
[Unloading class sun.reflect.GeneratedSerializationConstructorAccessor52] 
[Unloading class sun.reflect.GeneratedSerializationConstructorAccessor57] 
[Unloading class sun.reflect.GeneratedSerializationConstructorAccessor61] 
[Unloading class sun.reflect.GeneratedSerializationConstructorAccessor56] 
[Unloading class sun.reflect.GeneratedSerializationConstructorAccessor55] 
[Unloading class sun.reflect.GeneratedSerializationConstructorAccessor63] 
[Unloading class sun.reflect.GeneratedSerializationConstructorAccessor60] 
[Unloading class sun.reflect.GeneratedSerializationConstructorAccessor40] 
[Unloading class sun.reflect.GeneratedSerializationConstructorAccessor65] 
: 331336K->71676K(786432K), 13.8120660 secs] 556499K->71676K(1022400K), 13.8122360 secs] 

945289.234: [GC 945289.234: [ParNew: 209792K->2581K(235968K), 0.0065240 secs] 281468K->74257K(1022400K), 0.0066160 secs] 

945324.703: [GC 945324.703: [ParNew: 212373K->3829K(235968K), 0.0081040 secs] 284049K->75506K(1022400K), 0.0082040 secs] 

为什么这里会发生CMS(并发模式失败)?

老一代似乎:331336K->71676K(786432K)


并发模式失败按照定义

消息“并发模式失败” 表示并发 终身教授的集合 在终身教职之前没有完成 世代已满。

换句话说,新生代填满太快,溢出到终身代,但 CMS 无法在后台清除终身代。

对于您的情况,请拨打 945270.397

ParNew: 225163K->225163K(235968K)显示杨已经吃饱了,根本无法清除物体。

Update

一个相似的记录到你的已解释这里说

这表明 ParNew 集合 已提出要求,但并未尝试。 (原因是估计 没有足够的空间 CMS一代推广 最糟糕的情况是幸存的年轻一代 对象。)我们将这种失败称为“完全 升级保证失败”,导致CMS并发模式中断,调用full GC。

因此,在我看来,225M 的年轻对象以及 331K 的 Tenured 对象上的完整 GC 需要 13 秒,并将堆减少到 71 M,但这是并发模式失败的结果

建议

如果您确实创建了这么多旧对象,那么您可能需要更大的堆。

或者减少尝试将 -XX:CMSInitiatingOccupancyFraction 从 60 减少,但不认为这会产生很大的差异

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

为什么这里会发生CMS(并发模式失败)? 的相关文章

  • Android java.exe 以非零退出值 1 结束 [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我尝试过查看类似的解决方案 但没有解决方案有效 我以前运行应用程序没有问题 但我的新应用程序突然开始给我带来问题 当我尝试运行它时总是
  • 这种双重实例是否有害,或者根本没有必要?

    在仔细阅读遗留资源时 我发现了这一点 DataSet myUPC new DataSet myUPC dbconn getDataSet dynSQL Resharper 正确地将其中的 new Dataset 部分 灰显 并建议 删除多余
  • 如果垃圾收集器没有删除未引用的对象,它们还能运行吗?

    如果一个对象正在等待垃圾收集 但包含一个在该对象的最后一个引用更改时正在运行的线程 那么该线程是否仍会运行并且代码是否仍会执行 那么您是否可能有一堆应该删除的幽灵对象 但它们对您的代码产生了影响 你如何防止这种情况发生 有没有办法让对象知道
  • 将 Kotlin .kt 类打包到 JAR 中

    我如何构建HelloWorld kt as a JAR以便它运行 thufir dur kotlin thufir dur kotlin kotlinc HelloWorld kt include runtime d HelloWorld
  • 应用程序中 GC 长时间暂停

    我当前运行的应用程序需要最大堆大小为 16GB 目前我使用以下标志来处理垃圾收集 XX UseParNewGC XX UseConcMarkSweepGC XX CMSInitiatingOccupancyFraction 50 XX Di
  • JVM锯齿状空闲进程

    我目前正在进行一项涉及 JVM 及其内存使用工作原理的研究 我不明白的是 JVM在空闲时用什么填充它的内存 只是为了在堆几乎达到时释放它 为什么使用的内存不只有一条平线 顺便说一句 这个 java 应用程序托管在 glassfish 上 但
  • Java 中的垃圾收集是如何工作的?

    我想知道Java中的垃圾收集器如何处理以下情况 对象 A 引用了对象 B 对象 B 引用了对象 C 主程序引用了对象 A 因此 您可以通过对象 A 使用对象 B 通过对象 B 和对象 A 使用对象 C 如果对象 A 和对象 B 之间的链接设
  • 使用同一类的不同版本进行类加载:java.lang.LinkageError:尝试重复名称的类定义

    我有一个工作代码 可以动态加载具有不同类名的不同类实现 类文件被加载到内存数据库 Apache 德比数据库 类加载器检索 class文件来自BLOB列 我想做的是插入 class文件为带有版本列的二进制 BLOB 和IS ENABLED标志
  • 替代 __del__ 来获得最终结果并终止类中的进程?

    这个虚拟类类似于我当前的项目 class EndProcess object def init self self Q multiprocessing Queue self p1 multiprocessing Process target
  • Eclipse 找不到 javaw.exe

    当我启动 eclipse 时 我遇到这个问题 javaw exe在我的电脑中的位置是C Program Files Java jre7 bin 我尝试更改路径环境变量 然后出现不同的错误 例如 JRE 更新到 jre1 8 0 111 后
  • 使用 jni 从 C 调用 java 函数

    我正在编写一个简单的程序来从我的 C 程序调用 Java 函数 以下是我的代码 include
  • 将值存储为变量或再次调用方法更好吗?

    最近 我开始学习一些Java 从我对 JVM 的了解来看 JIT 使其在需要 CPU 周期的操作 即调用方法 上变得非常快 但也使其对内存产生了饥饿感 因此 当我需要与以前相同的方法获得相同的输出时 将之前的输出存储在变量中并再次使用它 同
  • Node.js 中的垃圾收集器

    据谷歌称 V8 通过采用 stop the world 分代 准确的垃圾收集器 来使用高效的垃圾收集 部分说法是 V8 在执行垃圾收集周期时会停止程序执行 一个明显的问题是 当暂停程序执行时 如何才能实现高效的 GC 我试图找到有关此主题的
  • 如何使用 JAVA_OPTS 环境变量?

    我该如何使用JAVA OPTS变量来配置Web服务器 Linux服务器 我该如何设置 Djava awt headless true using JAVA OPTS JAVA OPTS是一些服务器和其他 Java 应用程序附加到执行调用的标
  • 项目“MyProject”具有比运行 Eclipse 更高的编译器选项

    我正在尝试重建 Hibernate 配置 但我得到了Wrong Compiler Settings错误 请在下面找到我的应用程序配置和错误的屏幕截图 问题是因为 Eclipse 运行在与我的项目中指定的不同的 JVM 上 我的机器上安装了两
  • 为什么当达到 InitiatingHeapOccupancyPercent 时 G1 不开始标记周期?

    根据文档 http www oracle com technetwork articles java g1gc 1984535 html XX InitiatingHeapOccupancyPercent 设置触发标记周期的Java堆占用阈
  • 运行具有外部依赖项的 Scala 脚本

    我在 Users joe scala lib 下有以下 jar commons codec 1 4 jar httpclient 4 1 1 jar httpcore 4 1 jar commons logging 1 1 1 jar ht
  • 如何正确取消引用然后删除 JavaScript 对象?

    我想知道从内存中完全取消引用 JavaScript 对象的正确方法 确保删除时不会在内存中悬空 并且垃圾收集器会删除该对象 当我看这个问题时在 JavaScript 中删除对象 https stackoverflow com questio
  • 垃圾收集器是否在单独的进程中运行?

    垃圾收集器是否在单独的进程中启动 例如 如果我们尝试测量某段代码所花费的进程时间 并且在此期间垃圾收集器开始收集 它会在新进程上启动还是在同一进程中启动 它的工作原理如下吗 Code Process 1 gt Garbage Collect
  • 线程缓存和 Java 内存模型

    我正在尝试了解 Java 内存模型和线程 据我了解 每个线程都有 主 内存的本地副本 因此 如果一个线程尝试更改int变量 例如某个对象的变量 它会缓存int变量 如果它更改它 其他线程可能看不到更改 但是如果线程缓存一些对象而不是 int

随机推荐