как найти время приостановки приложения из файлов журнала GC

Я новичок в сборке мусора, пожалуйста, помогите мне получить ответы на мои следующие вопросы с четким объяснением

Я хочу найти приложение время приостановки и количество приостановок из файлов журналов GC для разных JVM:

  • СОЛНЦЕ
  • jRockit
  • IBM

различных версий.

A. Для SUN я использую опции JVM

-Xloggc:gc.log -verbose:gc -XX:+PrintGCTimeStamps -XX:+PrintHeapAtGC -XX:+UseParNewGC -XX:+PrintGCDetails -XX:+UseConcMarkSweepGC -XX:+CMSIncrementalMode

B. Для JRockit я использую параметры JVM

-Xms100m -Xmx100m -Xns50m -Xss200k -Xgc:genconpar -Xverbose:gc -Xverboselog:gc_jrockit.log

Мои вопросы

Q1. Что такое время приостановки приложения и почему оно происходит.

Вопрос 2. Как узнать по журналам, что произошла приостановка.

Q3. Время приостановки приложения равно сумме GC Times.

Eg:

2013-09-06T23:35:23.382-0700: [GC 150.505: [ParNew Желаемый размер оставшегося в живых 50331648 байт, новый порог 2 (максимум 15) - возраст 1: 28731664 байт, всего 28731664 - возраст 2: 28248376 байт, всего 569:0040 688128K->98304K(688128K), 0,2166700 с] 697655K->163736K(10387456K), 0,2167900 с] [Times: user=0,44 sys=0,04, real=0,22 с]

2013-09-06T23:35:28.044-0700: 155.167: [GC 155.167: [ParNew Желаемый размер оставшегося в живых 50331648 байт, новое пороговое значение 15 (максимум 15) - возраст 1: 22333512 байт, всего 22333512 - возраст 2: 2746839018 байт, 48 всего: 688128K->71707K(688128K), 0,0737140 с] 753560K->164731K(10387456K), 0,0738410 с] [Times: user=0,30 sys=0,02, real=0,07 с]

Время приостановки = 0,2167900 сек + 0,0738410 сек

я. Если да, мне нужно добавить все время для каждого gc

II. Если нет, пожалуйста, объясните мне подробно для тех журналов, которые мы считаем, что произошла приостановка, а те, которые не учитываются для разных сборщиков с журналами

Q4. Можем ли мы сказать, что время GC "0,2167900 , 0,0738410" равно паузам GC, т.е. TotalGCPause = 0,2167900 + 0,0738410

Q5. Можем ли мы рассчитать время приостановки, используя только указанные выше флаги, или нам нужно включить дополнительные флаги, такие как -XX:+PrintGCApplicationStoppedTime для SUN?

Вопрос 6. Я видел, как инструмент динамической трассировки вычисляет время приостановки и количество SUN без использования флага -XX:+PrintGCApplicationStoppedTime.


person Pydi    schedule 11.09.2013    source источник


Ответы (1)


Если вам нужна наиболее точная информация о том, сколько времени ваше приложение было остановлено из-за активности GC, вам следует использовать -XX:+PrintGCApplicationStoppedTime.

-XX:+PrintGCApplicationStoppedTime позволяет печатать количество времени, в течение которого потоки приложения были остановлены в результате внутренней операции виртуальной машины HotSpot (операции GC и точки сохранения).

Но для практического повседневного использования информации, предоставляемой журналами сборщика мусора, достаточно. Вы можете использовать подход, описанный в вашем вопросе 3., чтобы определить время, проведенное в GC.

person Aleš    schedule 11.09.2013
comment
общее время, затрачиваемое на сборку мусора = время приостановки приложения, но некоторые сборщики выполняют сборку мусора с потоками приложения, что в этом случае произойдет - person Pydi; 12.09.2013
comment
Общее время сборки мусора = сумма всех событий сборки мусора, перечисленных в вашем журнале сборки мусора. Постарайтесь уточнить, какие сборщики мусора выполняют сборку мусора с потоками приложения. - person Aleš; 12.09.2013
comment
Для CMS приложение приостанавливается только в два этапа, помечая и комментируя, но сборщик мусора выполняет и оставшиеся этапы, поэтому следует ли учитывать время остановки приложения или время приостановки = общее время сборщика мусора или сумма всех событий сборщика мусора + время отметки CMS + время замечания CMS = время приостановки приложения - person Pydi; 13.09.2013