Я хотел бы измерить «процентное соотношение 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()
.
Бр,
Джуни
collection_time / uptime
, так как это дает вам представление о том, как часто запускается GC. Все остальное почти наверняка является ложной точностью. - person kdgregory   schedule 06.06.2015