2014-03-18 4 views
1

G1GC протоколирование печати Heap оккупации дорожит в округляется до МБ или ГБ, есть способ, как печатать все значения в КБ или МБ?G1GC Log Округление значения для Big куч

Я хочу проанализировать тарифы распределения и продвижения, и это округление значений вводит неточность.

Например, GC-событие, приведенное ниже, показывает, что общая занятость кучи уменьшается от 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.

+0

Я ищу подтверждение, что это поведение по умолчанию и не может быть изменено. –

ответ

3

Посмотрите исходный код OpenJDK 7u hotspot here и here.

Обе точки используют методы byte_size_in_proper_unit и proper_unit_for_byte_size, расположенные here.

Я считаю, что единственный способ изменить журналы G1GC из PrintGCDetails или PrintGC - перекомпилировать JVM, и это можно сделать только с OpenJDK, а не с JVM Oracle.

Для получения дополнительной информации о формате вывода см. Ниже: stackoverflow post.

Вы также можете использовать инструмент jstat с параметрами -gc и -gcnew для данных в журналах G1GC, выбранных в разное время только в КБ, см. для получения дополнительной информации об использовании jstat. Если вы хотите написать аналогичный инструмент Jstat, источник находится here.

Смежные вопросы