java - 尽管有 UseCMSInitiatingOccupancyOnly 标志,CMS-initial-mark 仍在增加,并导致并发模式失败

标签 java performance garbage-collection concurrent-mark-sweep

CMS-initial-mark 从 60% 开始(预期值),并且不断增长,尽管使用:-XX:+UseCMSInitiatingOccupancyOnly 和 -XX:CMSInitiatingOccupancyFraction=60

我可以寻求帮助吗?为什么它会增加?

标志:

-Xms28g -Xmx28g -XX:PermSize=512m -XX:MaxPermSize=512m -Xss512k -XX:NewSize=8g -XX:MaxNewSize=8g -XX:SurvivorRatio=6 -XX:+AlwaysPreTouch -verbose:gc -XX:+PrintGCDetails -XX:+PrintGCTimeStamps -XX:+UseConcMarkSwee pGC -XX:+UseParNewGC -XX:+CMSConcurrentMTEnabled -XX:+CMSScavengeBeforeRemark -XX:CMSWaitDuration=3600000 -XX:+ExplicitGCInvokesConcurrent -XX:CMSScheduleRemarkEdenPenetration=10 -XX:CMSMaxAbortablePrecleanTime=5000 -XX:CMSInitiatingOccupancyFraction=60 -XX:+Use CMSInitiatingOccupancyOnly

GC日志:

08/25-18:00:48 [4] <48574> 145285.817:[CMS-concurrent-abortable-preclean-start]

08/25-18:00:51 [4] <48574> 145286.877:[GC(分配失败)145286.877:[ParNew(升级失败):6332558K->6339431K(7340032K),1.7870705 秒]14528 8.664: [CMS145288.749: [CMS-concurrent-abortable-preclean: 1.138/2.932 秒] [时间: user=7.11 sys=0.04, real=2.93 秒]

08/25-18:02:14 [4] <48574> (并发模式故障):20937785K->20947677K(20971520K),82.4977633 秒] 27269752K->20947677K(28311552K),[元空间:108472K->108472K(1148928K)],84.2851262秒][时间:user=84.51 sys=0.01,real=84.29秒]

老一代历史:

08/25-18:00:34 [4] <48574> 145271.408:[GC(CMS 初始标记)[1 CMS 初始标记:20933339K(20971520K)] 21000667K(28311552K),0.0057867 秒] [次数:用户=0。 04 系统=0.00,实际=0.01 秒]

08/25-18:02:31 [4] <48574> 145388.639:[GC(CMS 初始标记)[1 CMS 初始标记:20947677K(20971520K)] 21005038K(28311552K),0.0044022 秒] [次数:用户=0。 03 sys=0.00,real=0.01 秒]

最佳答案

(concurrent mode failure): 20937785K->20947677K(20971520K), 82.4977633 secs] 27269752K->20947677K(28311552K)

您有 28GiB 的总堆,其中 8GiB 是新生代,剩下 20GiB 留给老一代。 并发模式失败(本质上是完整 GC)后,堆上只剩下略小于 20GiB 的空间。这意味着,如果一切都得到提升,则 Activity 对象集在老年代中仅留下不到 1GB 的空闲容量。

要么您的堆尺寸过小,要么新生代尺寸过大,以至于您的工作负载无法满足 IHOP 所需的 40% 喘息空间,或者您的应用程序正在泄漏。

关于java - 尽管有 UseCMSInitiatingOccupancyOnly 标志,CMS-initial-mark 仍在增加,并导致并发模式失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46102707/

相关文章:

c# - 有没有办法显示 "blocking"WinForms 上下文菜单?

java - 如何用 H2O 处理大数据集

java - cmd中base64编译错误

java - 将 System.err.println 的输出重定向到文件而不更改代码

performance - 存在 NaN 值时的 Matlab 关系运算符性能

java - 应该使用多个循环或一个循环并检查内部条件

javascript - EaselJS removeChild 是否也删除附加的 eventListeners?

java - 如何以编程方式调用 swagger codegen?

java - 是否可以用 Java 实现 `Functor<T>`?

ios - 预渲染的 Core Graphics 动画不流畅且占用内存