Ведение журнала G1GC означает, что значения заполнения кучи округлены до МБ или ГБ, есть ли способ распечатать все значения в КБ или МБ?
Я хочу проанализировать ставки распределения и продвижения, и это округление значений вводит неточность.
Например, событие GC, 11.7G->1826.2M
ниже, показывает, что общее занятие кучи уменьшается с 11.7G->1826.2M
который показывает только округленное значение 11.7G
для общего размера кучи до сбора.
4592.204: [GC pause (G1 Evacuation Pause) (young)
[Eden: 9804.0M(9804.0M)->0.0B(9800.0M) Survivors: 112.0M->86.0M
Heap: 11.7G(15.0G)->1826.2M(15.0G)]
...
Используемые флаги VM:
-Xms16g -Xmx16g -XX:+UseG1GC -XX:+PrintGCDetails -XX:+PrintGCTimeStamps -Xloggc:gc.log
Использование Hotspot JVM 1.8.0-b132.
См. Исходный код OpenJDK 7u hotspot здесь и здесь.
Обе точки используют методы byte_size_in_proper_unit
и proper_unit_for_byte_size
расположенные здесь.
Я считаю, что единственный способ изменить журналы G1GC из PrintGCDetails или PrintGC - перекомпилировать JVM, и это можно сделать только с OpenJDK, а не с JVM Oracle.
Дополнительную информацию о формате вывода см. В следующей qaru.site/questions/303471/....
Вы также можете использовать инструмент jstat с параметрами -gc и -gc new для данных в журналах G1GC, выбранных в разное время только в КБ, см. Здесь для получения дополнительной информации об использовании jstat. Если вы хотите написать аналогичный инструмент Jstat, источник находится здесь.