Jvm G1垃圾有一个慢工
我在试图减少GC暂停(~400ms)方面遇到问题。我注意到我总是有一个工人比其他人慢得多:Jvm G1垃圾有一个慢工,jvm,garbage,g1gc,Jvm,Garbage,G1gc,我在试图减少GC暂停(~400ms)方面遇到问题。我注意到我总是有一个工人比其他人慢得多: 2013-06-03T17:24:51.606+0200: 605364.503: [GC pause (mixed) Desired survivor size 109051904 bytes, new threshold 1 (max 1) - age 1: 47105856 bytes, 47105856 total , 0.47251300 secs] [Parallel Time:
2013-06-03T17:24:51.606+0200: 605364.503: [GC pause (mixed)
Desired survivor size 109051904 bytes, new threshold 1 (max 1)
- age 1: 47105856 bytes, 47105856 total
, 0.47251300 secs]
[Parallel Time: 458.8 ms]
[GC Worker Start (ms): 605364503.9 605364503.9 605364503.9 605364503.9 605364503.9 605364504.0
Avg: 605364503.9, Min: 605364503.9, Max: 605364504.0, Diff: 0.1]
--> [**Ext Root Scanning (ms)**: **356.4** 3.1 3.7 3.6 3.2 3.0
Avg: 62.2, **Min: 3.0, Max: 356.4, Diff: 353.4**] <---
[Update RS (ms): 0.0 22.4 33.6 21.8 22.3 22.3
Avg: 20.4, Min: 0.0,
2013-06-03T17:24:51.606+0200:605364.503:[GC暂停(混合)
所需幸存者大小109051904字节,新阈值1(最大值1)
-年龄1:47105856字节,总计47105856
,0.47251300秒]
[并行时间:458.8毫秒]
[GC工作人员启动(ms):605364503.9 605364503.9 605364503.9 605364503.9 605364503.9 605364504.0
平均值:605364503.9,最小值:605364503.9,最大值:605364504.0,差值:0.1]
-->[**外部根扫描(ms)**:**356.4**3.1 3.7 3.6 3.2 3.0
平均值:62.2,**最小值:3.0,最大值:356.4,差异:353.4**][我宁愿将此作为评论发布,但我仍然缺乏必要的要点]
不知道这是否正常,但我遇到了同样的问题:
2014-01-16T13:52:56.433+0100: 59577.871: [GC pause (young), 2.55099911 secs]
[Parallel Time: 2486.5 ms]
[GC Worker Start (ms): 59577871.3 59577871.4 59577871.4 59577871.4 59577871.4 59577871.5 59577871.5 59577871.5
Avg: 59577871.4, Min: 59577871.3, Max: 59577871.5, Diff: 0.2]
[Ext Root Scanning (ms): 152.0 164.5 159.0 183.7 1807.0 117.4 113.8 138.2
Avg: 354.5, Min: 113.8, Max: 1807.0, Diff: 1693.2]
关于这个问题我一直找不到太多的东西,但在这里
基本上,正如您猜测的那样,GC工作线程被阻塞了
当处理单个根时。我也看到过类似的问题
通过填充代码缓存(保存JIT编译方法的地方)。
代码缓存被视为单个根,因此在其
由单个GC工作线程完成。当代码缓存填满时,
声称要扫描代码缓存的线程开始被阻塞
一个完整的GC会清除这个问题,因为G1目前就是这样做的
类卸载:完整的GC卸载一大堆类
任何已卸载类的方法的编译代码
被nmethod清扫者释放。所以在一个完整的GC之后
代码缓存中的编译方法更少
它也可能仅仅是加载的类的数量
系统字典也被视为单个可请求根
我想我会尝试启用代码缓存刷新并让您知道。如果你最终解决了这个问题,请告诉我,我也在努力解决它
问候