Раз в логах G1G C - PullRequest
       83

Раз в логах G1G C

1 голос
/ 21 января 2020

Я прочитал несколько описаний разных времен, напечатанных в журналах G1G C, но не смог доказать / понять, когда я их создал локально. Например, следующий журнал был создан на моем P C с Java 11. Я хотел знать, в чем разница между 0,500 мс в первой строке и 0,01 с во второй? Было ли приложение приостановлено (из-за STW) на 0,500 мс или на 10 мс (0,01 с)? Я пробовал такие инструменты, как GCeasy, он показывает максимальное время паузы 10 мс, а в случаях, когда Real = 0.00, GCeasy показывает минимальную паузу 0 мс. Интересно, что за пауза составляет 0,500 мс?

[9,090 с] [информация] [g c] G C (25) Пауза Янга (нормальная) (эвакуация G1) Пауза) 77M-> 2M (128M) 0,500 мс

[9,090 с] [информация] [г c, процессор] G C (25) Пользователь = 0,00 с Sys = 0,00 с Реальный = 0,01 с

Редактировать: G C Разница во времени паузы в г c .logs против JM C

0,687 мс пауза в g c .log enter image description here

Где, как 1,331 секунды в соответствии с JM C enter image description here

1 Ответ

1 голос
/ 22 января 2020

Я не уверен, стоит ли публиковать это как ответ, потому что это мое понимание этого журнала, но оно кажется слишком большим для комментария.

Общее время события 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 региона). Кто прав? Я оставлю это на ваше усмотрение.

Вы можете включить гранулярность безопасной точки для G1GC, например, через -Xlog:safepoint*.

Инструменты, которые вы используете, имеют свое собственное "мнение" о том, как обрабатывать каждый раз, создаваемый журналами, я думаю; но это абсолютно не 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. Значит ли это, что нет паузы ? Конечно, нет, это просто означает, что на процессор не тратится время.

...