Что означают "реальный", "пользовательский" и "sys" в java-журнале CMS gc?

Для следующей версии Java:

OpenJDK версия "1.6.0"
OpenJDK Runtime Environment (сборка 1.6.0-b23)
OpenJDK 64-разрядная серверная VM (сборка 20.0-b11, смешанный режим)

С помощью следующих флагов GC:

-verbose: дс
-XX: + UseConcMarkSweepGC
-XX: + CMSClassUnloadingEnabled
-XX: + PrintGCDetails
-XX: + PrintGCDateStamps

Мы получаем строки журнала, такие как:

2012-11-09T16: 46: 53.438-0100: [CMS-concurrent-mark: 4.039/4.060 secs] [Times: user = 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 секунды времени процессора и 4.060 секунд стены (включая также выход к другим потокам).

Но что здесь означают пользователь, sys и реальные значения?

Ответ 1

  • Sys и пользователь имеют исключительно процессорное время. Следовательно, они не включают время блокировки процесса для ЦП или выполнения операций ввода-вывода и т.д.

  • Время GC обычно должно быть похоже на время пользователя sys +, но если процесс заблокирован или ожидает, то он будет выше. Это будет справедливо для последовательного сборщика и блока с одним процессором. Однако в многопроцессорных средах (с параллельными коллектором) время GC будет меньше времени пользователя sys +, так как имеется несколько процессоров.

  • Реальное время будет похоже на время GC.