5

我的应用程序/平台内存利用率突然飙升。在 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 失败,内存中的突然峰值是可见的。解释和如何解决这个问题。

4

2 回答 2

16

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

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

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

只是我的2美分,

最好的问候,莱昂

于 2012-10-29T16:59:25.313 回答
3

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

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

于 2012-11-25T21:31:32.833 回答