12

对于以下 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 并发标记:4.039/4.060 秒] [时间:用户 = 4.09 系统 = 35.05,实际 = 4.06 秒]

根据https://blogs.oracle.com/poonam/entry/understanding_cms_gc_logs的初始“4.039/4.060 秒”意味着并发标记总共花费了 4.039 秒的 CPU 时间和 4.060 秒的挂墙时间(这也包括其他线程的产量) )。

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

4

1 回答 1

5
  1. sys 和 user 是独占的 CPU 时间。因此,它们不包括进程被 CPU 阻塞或正在执行 I/O 等的时间。

  2. GC 时间通常应该类似于 sys+user 时间,但如果进程被阻塞或等待,那么它会更高。这对于串行收集器和单个处理器盒来说是正确的。但是,在多处理器环境(具有并行收集器)中,GC 时间会小于 sys+user 时间,因为有多个 CPU。

  3. 实际时间类似于 GC 时间。

于 2013-12-18T21:59:48.497 回答