我看到我的应用程序/平台内存利用率突然飙升。在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故障,内存中的突然峰值可见。
请求您的意见。
答案 0 :(得分:14)
简单的解决方案,就是尝试增加老一代的规模。 或者你可以尝试使用G1算法,它可以减少老一代的碎片问题。
如果两种方法都无法解决您的问题,您可能需要检查您的代码,以减少单个对象的大小。
只需2美分,
最诚挚的问候, 利昂
答案 1 :(得分:2)
从可见的行中,我会假设您的应用程序代码创建了太多的垃圾对象。 CMS失败Full GC能够收集1.4GB的垃圾。所以这不是一个碎片问题,但CMS的问题没有赶上。 [CMS perm]让我很好奇你的GC设置是什么。也许你可以给CMS运行更多的CPU?或者你可以扩大新空间,以避免过早推广旧。
但可能的是,你运行效率低下的代码。我会附上一个分析器,并寻找垃圾分配热点。