在java CMS gc日志中,’real’,’user’和’sys’是什么意思?

对于以下Java版本:

OpenJDK版“1.6.0”
OpenJDK运行时环境(版本1.6.0-b23)
OpenJDK 64位服务器VM(内置20.0-b11,混合模式)

使用以下GC标记:

-verbose:GC
-XX:+ UseConcMarkSweepGC
-XX:+ CMSClassUnloadingEnabled
-XX:+ PrintGCDetails
-XX:+ PrintGCDateStamps

我们得到的日志行如下:

2012-11-09T16:46:53.438-0100:[CMS-concurrent-mark:4.039 / 4.060 secs] [次:用户= 4.09 sys = 35.05,real = 4.06 secs]

最初的“4.039 / 4.060秒”应根据https://blogs.oracle.com/poonam/entry/understanding_cms_gc_logs表示并发标记总共需要4.039秒的cpu时间和4.060秒的挂起时间(包括其他线程的收益率) )。

但是用户,系统和实际值在这里意味着什么?

  1. sys和user是专门的CPU时间。 因此,它们不包括进程被CPU阻塞或进行I / O等的时间。

  2. GC时间通常应与sys +用户时间相似,但如果进程被阻塞或等待则会更高。 对于串行收集器和单个处理器盒,情况确实如此。 但是,在多处理器环境(使用并行收集器)中,GC时间将小于sys +用户时间,因为有多个CPU。

  3. 实时时间与GC时间相似。