Как рассчитать коэффициент сбора мусора Java с помощью счетчиков JMX?

Я хотел бы измерить «процентное соотношение gc» с моим клиентом JMX от целевых JVM (JVM HotSpot и IBM). Я могу получить следующие счетчики через JMX:

  • Время работы JVM (время настенных часов)
  • Процессорное время JVM
  • Количество ядер
  • Время сбора на сборщик мусора

Какая формула лучше всего подходит для расчета «коэффициента gc» с этими входными счетчиками?

Я пробовал формулу:

collection_time / jvm_process_cpu_time * 100%

Но в некоторых случаях время сбора может быть больше, чем время процессора процесса jvm (коэффициент> 100%), поэтому очевидно, что collection_time должно быть тогда временем настенных часов. Итак, я могу сделать расчет по формуле:

collection_time / (jvm_process_cpu_time * nbr_of_cores) *100%

или просто по:

collection_time / jvm_uptime *100%

Я также нашел статью (Java: возвращает ли GarbageCollectorMBean.getCollectionTime время паузы или что-то другое?) где описано, как получить время процессора сбора вместо времени настенных часов, но после моих тестов он сообщает точно такое же время сбора, что и GarbageCollectorMXBean.getCollectionTime().

Бр,
Джуни


person Jouni Kokkila    schedule 06.06.2015    source источник
comment
Какую реальную проблему вы пытаетесь решить? Это должно направлять вас. В любом случае, маловероятно, что процессорное время будет правильным показателем, если ваше приложение постоянно не использует все ядра на 100%.   -  person kdgregory    schedule 06.06.2015
comment
Нам нужно добавить мониторинг активности gc к функциям самоконтроля нашего приложения. У нас есть десятки JVM, которые нужно отслеживать, и они должны быть активны 24/7, в том числе и на клиентских установках, поэтому нельзя использовать параметры регистрации JVM GC.   -  person Jouni Kokkila    schedule 06.06.2015
comment
В этом случае, вероятно, будет достаточно collection_time / uptime, так как это дает вам представление о том, как часто запускается GC. Все остальное почти наверняка является ложной точностью.   -  person kdgregory    schedule 06.06.2015