JAVA GC:ParNew(促销失败),并发模式失败

时间:2012-09-07 17:58:54

标签: java java-ee memory garbage-collection

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

  

1285.946:[GC 1285.946:[ ParNew(促销失败):353920K-> 353920K(353920K),0.8003983秒] 1286.747:[CMS1287.338:   [CMS-con current-sweep:7.902 / 9.624 secs] [次:用户= 96.62 sys = 2.35,   real = 9.62 secs](并发模式失败):   2531317K-> 1161025K(2752512K),24.8330303秒]   2860005K-> 1161025K(3106432K),[CMS Perm:37117K-> 3 6905K(62368K)],   25.6341706秒] [时间:用户= 26.41 sys = 0.05,实际= 25.63秒] [POA RootPOA - 摆脱:17 oid:00 17 2E 29 23 33 49 34 25 3E opname:ping -   处理请求]   1312.367:[GC 1312.367:[ParNew:314624K-> 30240K(353920K),0.0188874秒] 1475649K-> 1191266K(3106432K),0.0194380秒] [时间s:用户= 0.40   sys = 0.00,real = 0.02秒]   1313.249:[GC 1313.249:[ParNew:344864K-> 39296K(353920K),0.0300220 secs] 1505890K-> 1201198K(3106432K),0.0305488 secs]

ParNew(促销失败),并发模式失败:请解释以及如何解决这个问题。我相信由于GC故障,内存中的突然峰值可见。

请求您的意见。

2 个答案:

答案 0 :(得分:14)

“ParNew(促销失败)”的意思是,有一些来自年轻一代的物品将被提升为老一代,但没有足够的空间。也许旧的空间几乎已经满了,或者推广的对象太大了,并且没有足够的继续空间。

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

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

只需2美分,

最诚挚的问候, 利昂

答案 1 :(得分:2)

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

但可能的是,你运行效率低下的代码。我会附上一个分析器,并寻找垃圾分配热点。