Анализ журналов сборщика мусора

Я использую параметры -XX:+PrintGCApplicationStoppedTime и -XX:+PrintGCApplicationConcurrentTime, чтобы включить ведение журнала gc.

Но обнаружил, что только после 4 0r 5 распечаток PrintGCApplicationStoppedTime мои фактические данные журналов gc были напечатаны с помощью команды -XX:+PrintGCDetails!

По определению PrintGCApplicationStoppedTime печатает время остановки приложения для каждого gc.

Но мне не ясно, почему он печатает, как показано в примере ниже.

Это потому что

PrintGCApplicationStoppedTime просто печатает после достижения каждой безопасной точки

(or)

файл журнала будет регистрироваться разными потоками gc. Я использую параллельную развертку для полного GC и ParNew для молодого поколения.

Мое приложение - веб-приложение.

O / p Pattern - я получаю следующее:

Application time: 0.3847031 seconds
Total time for which application threads were stopped: 0.3135419 seconds
Application time: 0.1520723 seconds
Total time for which application threads were stopped: 0.1993920 seconds
Application time: 0.1188219 seconds
Total time for which application threads were stopped: 0.1993920 seconds
Application time: 0.1188219 seconds
Total time for which application threads were stopped: 0.1993920 seconds
Application time: 0.1188219 seconds
Total time for which application threads were stopped: 0.1993920 seconds
Application time: 0.1188219 seconds
1.229: [GC 1.229: [ParNew: 256000K->51200K(256000K), 0.1509756 secs] 426536K->334728K(997376K), 0.1510198 secs] [Times: user=0.85 sys=0.07, real=0.15 secs]

person Jeyshri Gopalakrishnan    schedule 16.04.2015    source источник


Ответы (1)


К сожалению, PrintGCApplicationStoppedTime — неверное имя для этой опции JVM.

На самом деле он печатает время, проведенное в безопасных точках. Пауза в Safepoint происходит не только из-за сборки мусора, но и по многим другим причинам:

  • Деоптимизация
  • Предвзятая отмена блокировки
  • Дамп потока
  • Проверка кучи
  • Переопределение класса
  • и т. д. ( смотрите список)

Точки сохранения могут возникать периодически даже без запрошенной операции с виртуальной машиной, чтобы спустить бездействующие мониторы, выполнить определенную очистку JIT и т. д. См. параметр -XX:GuaranteedSafepointInterval VM (по умолчанию 1000 миллисекунд).

Используйте -XX:+PrintSafepointStatistics -XX:PrintSafepointStatisticsCount=1 для получения дополнительной информации о точках сохранения.

person apangin    schedule 16.04.2015