有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

jakarta ee JAVA GC:ParNew(升级失败),并发模式失败

我发现我的应用程序/平台内存利用率突然飙升。在下面我看到的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故障,内存中的突然峰值是可见的。解释并解决此问题


共 (2) 个答案

  1. # 1 楼答案

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

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

  2. # 2 楼答案

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

    简单的解决办法,就是尽量扩大老一代的规模。 或者您可以尝试使用G1算法,它可以减少旧一代的碎片问题

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

    只要我的2美分

    致以最良好的祝愿, 利昂