[英]Times in G1GC logs
我已经阅读了 G1GC 日志中打印的一些不同时间的描述,但是当我在本地生成它们时无法真正证明/理解。 例如,以下日志是在我的 PC 上使用 Java 11 生成的。我想知道,第一行中的 0.500 毫秒与第二行中的 0.01 秒之间有什么区别? 应用程序暂停(因为 STW) 0.500 毫秒还是 10 毫秒(0.01 秒)? 我尝试过像 GCeasy 这样的工具,它显示最大暂停时间为 10 毫秒,在 Real = 0.00 的情况下,GCeasy 显示最小暂停时间为 0 毫秒。 我想知道,0.500ms 代表什么样的暂停呢?
[9.090s][info][gc] GC(25) Pause Young (Normal) (G1 Evacuation Pause) 77M->2M(128M) 0.500ms
[9.090s][info][gc,cpu] GC(25) User=0.00s Sys=0.00s Real=0.01s
编辑:gc.logs 与 JMC 中的 GC 暂停时间差异
我不确定我是否应该将其作为答案发布,因为这是我对此日志的理解,但似乎对于评论来说太大了。
在总时间STW
事件为0.500ms
,如果你看一下用眼睛G1GC
和既不0.500ms
,也不10ms
,如果你把Shenandoah
的例子。 当你使用G1GC
, STW event
被视为0.500ms
,使用Shenandoah
,将导致0.500ms + delta
; 其中,该delta
将是累计花费的时间将所有java threads
的safepoint
(也称为TTSP
-时间到安全点)+什么是需要的是清理safepoint
。 可能是一张图片会让这更容易:
|------|------------------------|---------|
| TTPS | G1 Evacuation Pause | CleanUp |
|------|------------------------|---------|
G1GC
对待作为STW Event
的G1 Evacuation Pause
唯一地区。 例如, Shenandoah
将整个事件视为STW
事件(所有 3 个区域)。 谁是对的? 我会把这留给你来决定。
例如,您可以通过-Xlog:safepoint*
为G1GC
启用安全点粒度。
您使用的工具有自己的“意见”哦,我猜如何处理日志产生的每次; 但绝对不是10 ms
。 为什么? 正如您已经看到的(正如您在评论中所说),有时您会在日志中得到类似的信息:
[9.090s][info][gc ] GC(25) Pause Young (Normal) (G1 Evacuation Pause) 77M->2M(128M) 0.500ms
[9.090s][info][gc,cpu ] GC(25) User=0.00s Sys=0.00s Real=**0.00s**
注意Real=0.00s
。 这是否意味着没有停顿? 当然不是,这只是意味着没有花费 cpu 时间。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.