【问题标题】:JAVA GC : ParNew (promotion failed) , concurrent mode failureJAVA GC:ParNew(升级失败),并发模式失败
【发布时间】:2012-09-07 17:58:54
【问题描述】:

我发现我的应用程序/平台内存利用率突然飙升。在下面看到的 GC 详细日志中:

1285.946: [GC 1285.946: [**ParNew (promotion failed)**: 353920K-353920K(353920K), 0.8003983 secs]1286.747: [CMS1287.338:
[CMS-con current-sweep: 7.902/9.624 secs] [Times: user=96.62 sys=2.35,
real=9.62 secs]  (**concurrent mode failure**):
2531317K->1161025K(2752512K), 24.8330303 secs]
2860005K->1161025K(3106432K), [CMS Perm : 37117K->3 6905K(62368K)],
25.6341706 secs] [Times: user=26.41 sys=0.05, real=25.63 secs] [ POA RootPOA - rid: 17 oid: 00 17 2E 29 23 33 49 34 25 3E  opname: ping -
process request ]
1312.367: [GC 1312.367: [ParNew: 314624K->30240K(353920K), 0.0188874 secs] 1475649K->1191266K(3106432K), 0.0194380 secs] [Time s: user=0.40
sys=0.00, real=0.02 secs]
1313.249: [GC 1313.249: [ParNew: 344864K->39296K(353920K), 0.0300220 secs] 1505890K->1201198K(3106432K), 0.0305488 secs]

ParNew (promotion failed ),concurrent mode failure :

我相信由于 GC 失败,内存中的突然峰值是可见的。解释以及如何解决这个问题。

【问题讨论】:

    标签: java jakarta-ee memory garbage-collection


    【解决方案1】:

    “ParNew(promotion failed)”的意思是,有一些对象会从年轻代提升到老年代,但是空间不够。可能旧空间快满了,或者提升的对象太大,没有足够的继续空间。

    简单的解决方案,就是尝试增加老年代的大小。 或者你可以尝试使用 G1 算法,它可以减少老年代的碎片问题。

    如果这两种方法都不能解决您的问题,您可能需要检查您的代码,以减小单个对象的大小。

    只要我的 2 美分,

    最好的问候, 里昂

    【讨论】:

      【解决方案2】:

      从可见的行来看,我认为您的应用程序代码创建了太多垃圾对象。 CMS 失败 Full GC 能够收集 1.4GB 的垃圾。所以这不是碎片问题,而是 CMS 没有赶上的问题。 [CMS perm] 让我很好奇你的 GC 设置是什么。也许你可以给 CMS 更多的 CPU 来运行?或者您可以扩大新空间以避免过早升级到旧空间。

      但很有可能,您运行的代码效率低下。我会为其附加一个分析器并寻找垃圾分配热点。

      【讨论】:

        猜你喜欢
        • 2015-08-06
        • 2019-02-23
        • 1970-01-01
        • 1970-01-01
        • 2023-03-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多