GC (Ошибка распределения) [PSYoungGen] - PullRequest
0 голосов
/ 13 ноября 2018

Недавно мы переключили наш код на java8 с java7. Мы получаем сбой распределения GC каждые 10 минут для PSYoungGen. Мы даже пытались установить переключатель -XX: NewSize и -XX: NewMaxSize примерно до 5 ГБ (общий размер кучи составляет 10 ГБ). Но даже после того, как распечатывается ошибка выделения памяти gc, PSYoungGen срабатывает почти до размера (5 ГБ). Добавлены некоторые логи:

[GC (Allocation Failure) [PSYoungGen: 3145728K->114922K(3670016K)] 3145728K->115026K(5767168K), 0.2511084 secs] [Times: user=0.26 sys=0.14, real=0.25 secs]
[GC (Allocation Failure) [PSYoungGen: 4443141K->125893K(4718592K)] 4443261K->126229K(6815744K), 0.2318927 secs] [Times: user=0.42 sys=0.22, real=0.24 secs]

В одном из ответов: Java GC (Ошибка распределения) в связи с этим я видел, что это нормальное поведение, просто интересно узнать, есть ли способ преодолеть это? Спасибо.

1 Ответ

0 голосов
/ 13 ноября 2018

Я думаю, что это тот случай, когда значение NewSize, которое вы можете установить, контролирует размер всего нового поколения (которое состоит из пространств выживших eden и ), так что, возможно, ваш eden все еще не достаточно большого размера, чтобы выделить его непосредственно для новых больших объектов (например, больших байтов []).

Что я спрашиваю, так это то, что даже если вы установите новое значение 5Gb, я думаю, что Документы Oracle предполагают, что по умолчанию SurvivorRatio равно 8, это будет означать приблизительно 1.25Gb пространства выживших, оставляя 3.75 Gb Эдем. Возможно ли разместить объекты выше или ближе к этому размеру?

Что касается таких журналов, то в ответе, на который вы ссылаетесь в своем ОП, принятый ответ дает комментарий

"Старые JVM не печатали причину ГХ для незначительных циклов ГХ.

Так что, возможно, это всегда происходило, и вы просто не знали до сих пор.

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