Вариант использования кучи JVM. Этот график нормальный? - PullRequest
3 голосов
/ 07 апреля 2020

Это использование памяти JVM подготовительным сервером при выполнении нагрузочного теста (Xmx = 10g). У меня есть несколько вопросов.

  1. Сборщик мусора работает почти каждые 5 минут. За эти 5 минут куча выросла с 3 ГБ до 10 ГБ. Это нормальный рост? Если нет, то как можно проанализировать проблему в моем приложении?

  2. В течение двух циклов сборщика мусора наблюдается постепенное уменьшение и внезапный всплеск использования средней кучи. В чем причина?

  3. Внутри постепенного снижения, упомянутого во втором комментарии, без плавного снижения, есть вибрация. В чем причина?

1 Ответ

5 голосов
/ 07 апреля 2020

Этот шаблон использования кучи иногда называют «пилой» и кажется здоровым, поскольку в вашем случае он остается последовательным. Взгляните на статью Утечки памяти: ошибки и заблуждения , в которой более подробно рассматриваются общие шаблоны использования кучи и их проблемы.

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

  2. Скорее всего, вы запускаете параллельный G C, который не выполняет полный цикл G C до тех пор, пока есть доступная память. Зубья рисунка пилы, вероятно, представляют собой живые объекты, перемещающиеся из пространства выживших в старое пространство.

  3. То же, что и 1.

Вместо Глядя на картинку, вы хотите понять некоторые основные параметры c и оценить, насколько они полезны для вашего приложения:

  1. Какова длительность и частота нового пространства G C

  2. Какова продолжительность и частота старого пространства G C

  3. Сколько времени уходит в G C

  4. Сколько% ЦП расходуется в G C

  5. Влияние задержки приложения на G C

...