首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何从g1gc日志中计算对象提升率?

如何从g1gc日志中计算对象提升率?
EN

Stack Overflow用户
提问于 2019-08-13 13:57:44
回答 1查看 370关注 0票数 1

我使用下面的公式来计算从并行GC日志中提升的字节()

代码语言:javascript
复制
promoted_bytes = (('younggen_used_before_gc') - ('younggen_used_after_gc')) - (('heap_used_before_gc') - ('heap_used_after_gc'))

如何从G1GC日志中计算相同的值

上述公式在并行GC日志中运行良好,但对于下面的G1GC日志事件,它给出了负值(-147.6)。

代码语言:javascript
复制
2019-04-24T13:41:06.982+0000: 59627.940: [GC pause (G1 Evacuation Pause) (young), 0.1640632 secs]    
   [Parallel Time: 161.0 ms, GC Workers: 2]    
      [GC Worker Start (ms): Min: 59627940.0, Avg: 59627940.0, Max: 59627940.0, Diff: 0.0]    
      [Ext Root Scanning (ms): Min: 56.4, Avg: 57.5, Max: 58.6, Diff: 2.1, Sum: 115.0]    
      [Update RS (ms): Min: 7.1, Avg: 7.2, Max: 7.3, Diff: 0.3, Sum: 14.4]    
         [Processed Buffers: Min: 46, Avg: 58.5, Max: 71, Diff: 25, Sum: 117]    
      [Scan RS (ms): Min: 3.7, Avg: 3.8, Max: 3.9, Diff: 0.2, Sum: 7.7]    
      [Code Root Scanning (ms): Min: 0.0, Avg: 0.0, Max: 0.0, Diff: 0.0, Sum: 0.0]    
      [Object Copy (ms): Min: 91.3, Avg: 92.4, Max: 93.4, Diff: 2.1, Sum: 184.8]    
      [Termination (ms): Min: 0.0, Avg: 0.0, Max: 0.0, Diff: 0.0, Sum: 0.0]    
         [Termination Attempts: Min: 1, Avg: 1.0, Max: 1, Diff: 0, Sum: 2]    
      [GC Worker Other (ms): Min: 0.0, Avg: 0.0, Max: 0.0, Diff: 0.0, Sum: 0.0]    
      [GC Worker Total (ms): Min: 160.9, Avg: 160.9, Max: 160.9, Diff: 0.0, Sum: 321.9]    
      [GC Worker End (ms): Min: 59628100.9, Avg: 59628100.9, Max: 59628100.9, Diff: 0.0]    
   [Code Root Fixup: 0.1 ms]    
   [Code Root Purge: 0.0 ms]    
   [Clear CT: 0.6 ms]    
   [Other: 2.3 ms]    
      [Choose CSet: 0.0 ms]    
      [Ref Proc: 0.8 ms]    
      [Ref Enq: 0.1 ms]    
      [Redirty Cards: 0.4 ms]    
      [Humongous Register: 0.1 ms]    
      [Humongous Reclaim: 0.2 ms]    
      [Free CSet: 0.2 ms]    
   [Eden: 352.0M(352.0M)->0.0B(392.0M) Survivors: 56.0M->16.0M Heap: 5133.7M(8192.0M)->4594.1M(8192.0M)]    
 [Times: user=0.32 sys=0.00, real=0.17 secs]    

这是我目前面临的问题,从G1GC日志中,对于大多数日志事件,提升的字节值正在变为负值。

是否有与G1GC日志不同的提升字节计算公式?我在这里有遗漏什么吗?

EN

回答 1

Stack Overflow用户

发布于 2019-08-23 03:55:22

可能是由于Humongous Objects回收:

代码语言:javascript
复制
[Humongous Reclaim: 0.2 ms]  --> Time spent to free humongous regions

Humongous Objects直接在老代分配,只在标记周期结束时或在完整的GCs (请参阅这里)期间收集到。

但是,由于JDK8u40,默认情况下,G1GC会在每个年轻的GC (请参阅这里)中回收死的humongous objects对象。

可以尝试关闭此功能并再次度量:

代码语言:javascript
复制
-XX:-G1ReclaimDeadHumongousObjectsAtYoungGC
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57479367

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档