Подтвердить что ты не робот

Сделать журналы GC GC show MB или GB вместо KB

По умолчанию Java GC log выводится информация о памяти в КБ (килобайтах). Я знаю, что это может показаться глупым, но, учитывая, что большинство Jvms, с которыми я имею дело, имеют размеры кучи, близкие к 20-40 ГБ, мне очень неудобно быстро считывать числа в КБ, особенно при быстром сканировании журналов в шпакле и т.д.

Можно ли заставить Java напечатать эти числа в долях MB или GB вместо этого?

В документации JDK я не нашел никакого варианта.

Если это невозможно, есть ли идеи о том, как можно добавить эту функцию для регистрации GC? (не извне, а из с JVM)

Заранее благодарим вас за помощь.

4b9b3361

Ответ 1

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

Используйте G1 в JDK 8, и он будет печатать в соответствующих единицах, в зависимости от размера кучи:

$ java -XX:+UseG1GC -verbose:gc
[GC pause (Metadata GC Threshold) (young) (initial-mark) 592M->23M(100G), 0.0137879 secs]

Перейдите на JDK 9, а затем Unified Logging будет печатать в соответствующих единицах, в зависимости от размера кучи, для всех сборщиков (плюс, отметки времени также находятся в соответствующих единицах):

$ java -XX:+UseParallelGC -Xlog:gc
[0.766s][info][gc] GC(0) Pause Young (Metadata GC Threshold) 4300M->15M(117760M) 6.765ms

Ответ 2

позволяет сказать, что ваш файл журнала GC находится в: (./my-app-gc.log,)
затем используйте этот онлайн-плагин для вызова API:

curl -X POST --data-binary @./my-app-gc.log http://api.gceasy.io/analyzeGC?apiKey= --header "Content-Type:text"

Или используйте третье программное обеспечение [ PostMan]

Это программное обеспечение Поддержка:
введите описание изображения здесь ......................................................
| • - Загрузить для компьютера: здесь

| • - Загрузить для браузеров  : здесь

......................................................

Пример вывода плагина PostMan:

{
 {
 "isProblem": true,
 "problem": [
 "122 times threads were stopped for more than 5 seconds"
],
"jvmHeapSize": {
"youngGen": {
  "allocatedSize": "7.5 gb",
  "peakSize": "6 gb"
},
"oldGen": {
  "allocatedSize": "22.5 gb",
  "peakSize": "22.5 gb"
},
"metaSpace": {
  "allocatedSize": "1.04 gb",
  "peakSize": "48.52 mb"
},
"total": {
  "allocatedSize": "30 gb",
  "peakSize": "28.5 gb"
}
},
"gcStatistics": {
"totalCreatedBytes": "249.49 gb",

этот вывод для вас полезен Json Format of Data.

Ответ 3

Возможно, вы могли бы просто создать простую программу bash для переформатирования журнала?

В моем примере я предполагаю, что вы используете linux и у вас есть groovy по пути.

В /usr/bin создайте файл kb2mb с контентом вроде этого:

#!/usr/bin/env groovy

System.in.readLines().each{
  println(it.replaceAll(/\d+K/) {
    (((it[0..-2] as Integer) / 1024) as Double).round(2) + "M"
  })
}

Затем дайте разрешение на выполнение программы: chmod +x /usr/bin/kb2mb.

Наконец, вы можете запустить его следующим образом:

cat gc.log|kb2mb

Пример вывода:

2015-05-26T14: 45: 37,987-0200: 151,126: [GC (сбой распределения) 151.126: [DefNew: 614,37 М- > 68,25 М (614,38 М), 0,0584157 сек] 1581,39 М- > 1243,41 М (1979,75 M), 0,0585007 сек.] [Times: user = 0,06 sys = 0,00, real = 0,06 secs]

Вместо groovy вы можете, конечно, использовать bash, python и т.д.