#jvm
#jvm
Вопрос:
Параметры JVM:
-server -Xmx2g -Xms2g -Xmn256m -Xss256k -XX: DisableExplicitGC -XX: UseConcMarkSweepGC -XX: CMSParallelRemarkEnabled -XX:LargePageSizeInBytes=128m -XX: UseFastAccessorMethods -XX: UseCMSInitiatingOccupancyOnly -XX:CMSInitiatingOccupancyFraction=70 -XX: PrintGCDetails -Xloggc:logs/gc.log -XX: PrintGCTimeStamps
Java-версия
java version "1.8.0_45"
Java(TM) SE Runtime Environment (build 1.8.0_45-b14)
Java HotSpot(TM) 64-Bit Server VM (build 25.45-b02, mixed mode)
Журнал GC:
4728.367: [GC (Allocation Failure) 4728.367: [ParNew: 210107K->314K(235968K), 0.0041113 secs] 650117K->440325K(2070976K), 0.0042571 secs] [Times: user=0.03 sys=0.00, real=0.01 secs]
4729.843: [GC (Allocation Failure) 4729.843: [ParNew: 210106K->4023K(235968K), 0.0061596 secs] 650117K->444034K(2070976K), 0.0063117 secs] [Times: user=0.04 sys=0.00, real=0.00 secs]
4730.447: [GC (Allocation Failure) 4730.447: [ParNew: 212630K->2166K(235968K), 0.0202457 secs] 652642K->442177K(2070976K), 0.0203974 secs] [Times: user=0.22 sys=0.01, real=0.02 secs]
4731.010: [GC (Allocation Failure) 4731.010: [ParNew: 211598K->1463K(235968K), 0.0256586 secs] 651610K->441475K(2070976K), 0.0258524 secs] [Times: user=0.04 sys=0.01, real=0.02 secs]
4731.583: [GC (Allocation Failure) 4731.583: [ParNew: 211255K->528K(235968K), 0.0200805 secs] 651267K->440572K(2070976K), 0.0202633 secs] [Times: user=0.10 sys=0.00, real=0.02 secs]
4732.153: [GC (Allocation Failure) 4732.153: [ParNew: 210320K->3971K(235968K), 0.0032271 secs] 650364K->444130K(2070976K), 0.0033627 secs] [Times: user=0.04 sys=0.00, real=0.00 secs]
Я использую GCViewer! для анализа журнала GC.
часть результата выглядела следующим образом:
Total heap(usage / alloc.max) 625.9M(30.9%)/2,022.4M
Tenured heap(usage / alloc.max) 415M(23.2%)/1,792M
Young heap(usage / alloc.max) 212.5(92.2%)/230.4M
Происходит ли утечка памяти? или как оптимизировать параметры JVM?
Комментарии:
1. Параметры
-Xmn256m -Xss256k -XX: UseConcMarkSweepGC -XX: CMSParallelRemarkEnabled -XX:LargePageSizeInBytes=128m -XX: UseCMSInitiatingOccupancyOnly -XX:CMSInitiatingOccupancyFraction=70
предполагают, что вы уже оптимизировали JVM. Если эти параметры не были результатом оптимизации, вам следует удалить их все, чтобы собрать статистику, которая не является результатом ваших собственных явных параметров. Затем, если есть реальные проблемы с производительностью, добавьте те параметры, которые действительно улучшают ситуацию.
Ответ №1:
Сложно, если не невозможно, определить, есть ли утечка памяти из этих журналов.
[GC (Allocation Failure)
означает, что память не может быть выделена в блоке молодого поколения, этот сбой выделения запускает сборщик мусора (GC).
Видно, что в выделенной куче для молодого поколения не хватает места на 92%, программе требуется больше новой памяти, но новой памяти недостаточно, поэтому GC должен выполнить очистку, чтобы освободить часть памяти.
Поскольку в других областях кучи все еще много свободного места, я бы предпочел изучить, что заставляет программу создавать новые объекты так быстро, вместо настройки параметров JVM.
Комментарии:
1. Спасибо! в нем есть несколько экземпляров kafka consumer, и в процессе обработки бизнес-логики существует большое количество временных переменных.