У нас есть сервер Glassfish на сервере Linux с включенным verbose:gc с выводом в файле gc.log.
Мы используем флаг -XX:+PrintGCDetails
. Сгенерированный файл содержит такие строки:
14.796: [GC [PSYoungGen: 432125K->45845K(454336K)] 537435K->153491K(624832K), 0.0304470 secs] [Times: user=0.12 sys=0.01, real=0.02 secs]
15.337: [GC [PSYoungGen: 269819K->25031K(464768K)] 377465K->154113K(635264K), 0.0361400 secs] [Times: user=0.10 sys=0.01, real=0.03 secs]
15.373: [Full GC (System) [PSYoungGen: 25031K->0K(464768K)] [PSOldGen: 129081K->123718K(170496K)] 154113K->123718K(635264K) [PSPermGen: 92038K->92038K(184384K)], 0.3855460 secs]
Как видите, последняя строка не содержит части [Times: ...]
. Строка события GC не полностью записывается в файл журнала, потому что, когда происходит следующее событие GC, записывается часть [Times: ...]
предыдущей строки, а затем записывается еще одна неполная строка, что дает нам что-то вроде:
14.796: [GC [PSYoungGen: 432125K->45845K(454336K)] 537435K->153491K(624832K), 0.0304470 secs] [Times: user=0.12 sys=0.01, real=0.02 secs]
15.337: [GC [PSYoungGen: 269819K->25031K(464768K)] 377465K->154113K(635264K), 0.0361400 secs] [Times: user=0.10 sys=0.01, real=0.03 secs]
15.373: [Full GC (System) [PSYoungGen: 25031K->0K(464768K)] [PSOldGen: 129081K->123718K(170496K)] 154113K->123718K(635264K) [PSPermGen: 92038K->92038K(184384K)], 0.3855460 secs] [Times: user=0.38 sys=0.01, real=0.39 secs]
3617.352: [GC [PSYoungGen: 431872K->8052K(439936K)] 585800K->161981K(718144K), 0.0085710 secs]
Поскольку строка не закончена, возврат каретки отсутствует, поэтому строка не отображается в таких инструментах, как multitail
Используя флаг -XX:+PrintGC
, у нас больше нет этой проблемы. Но так как нам нужна полная информация, это не очень хорошее решение.
Версия JVM, работающая на Linux:
java version "1.6.0_26"
Java(TM) SE Runtime Environment (build 1.6.0_26-b03)
Java HotSpot(TM) 64-Bit Server VM (build 20.1-b02, mixed mode)
Итак, вопрос: можно ли заставить JVM записывать строку журнала (своего рода флеш-трюк)? Или возможно иметь детали GC без последней части?