VisualVM показывает двойной Xmx как максимальный размер кучи

У меня есть следующая проблема:

Существует виртуальная машина Java с опцией Xmx, установленной на 70000 м = 70 ГБ (да, она такая большая). Но если я отслеживаю ранее упомянутую JVM, Max Heap отображается как 140000 м (как видно на скриншоте).

Скриншот

После списка используемых параметров JVM:

-XX:+UseG1GC
-Duser.timezone=Europe/Berlin
-Djava.security.egd=file:///dev/urandom
-Dsun.rmi.transport.tcp.handshakeTimeout=180000
-Dsun.rmi.dgc.client.gcInterval=600000
-Dsun.rmi.dgc.server.gcInterval=600000
-verbose:gc
-XX:CICompilerCount=2
-Xrunjdwp:transport=dt_socket,server=y,address=3997,suspend=n
-Xms70000m
-Xmx70000m
-XX:+UnlockExperimentalVMOptions
-XX:G1HeapRegionSize=32
-XX:MaxGCPauseMillis=200
-XX:G1NewSizePercent=2
-XX:G1MaxNewSizePercent=60
-XX:ParallelGCThreads=8
-XX:ConcGCThreads=2
-XX:InitiatingHeapOccupancyPercent=45
-XX:G1MixedGCLiveThresholdPercent=65
-XX:G1HeapWastePercent=10
-XX:G1OldCSetRegionThresholdPercent=10
-XX:G1ReservePercent=10

Кто-нибудь подскажет, почему VisualVM показывает двойной максимальный размер кучи?


person dRoeder    schedule 09.11.2015    source источник
comment
70000 МБ = 70 ГБ. Можете ли вы подтвердить, что запрашиваете такую ​​большую кучу? Это не выглядит правильным для меня.   -  person duffymo    schedule 09.11.2015
comment
Моя ошибка - спасибо за исправление.   -  person duffymo    schedule 09.11.2015
comment
Да он действительно такой большой!   -  person dRoeder    schedule 10.11.2015
comment
КСТАТИ. У нас есть сервер с 192 ГБ ОЗУ, на котором работают три jvms (один с 30 ГБ и два с 70 ГБ).   -  person dRoeder    schedule 10.11.2015
comment
Теперь понятно - JVM не хватает памяти. Вы больше, чем для самой JVM и других объектов. Даже 70-гигабайтной JVM будет недостаточно.   -  person duffymo    schedule 10.11.2015
comment
Ваш ответ не ясен. Я спрошу, почему visualvm показывает максимальный размер кучи со 140 ГБ, хотя для Xmx установлено значение 70 ГБ. Ошибок нехватки памяти нет. В конкретном случае (где был сделан скриншот) использовалось только 30% кучи.   -  person dRoeder    schedule 11.11.2015


Ответы (1)


Это ошибка в VisualVM при использовании сборщика мусора G1, максимум на самом деле не такой большой. Jconsole сообщает об этом правильно.

Следующий отчет дает возможное объяснение . Причина здесь в том, что разные поколения больше не имеют фиксированного размера, а вместо этого максимальный размер для каждого из них равен размеру полной кучи (поскольку они оба могут использовать столько, сколько необходимо). Официального отчета об ошибке я пока не нашел.

person Thirler    schedule 22.11.2016
comment
вот отчет об ошибке github: github.com/oracle/visualvm/issues/127 - person Alex Colomb; 04.12.2020