Как проверить, является ли моя проблема с сборкой мусора утечкой памяти или просто недостаточно выделенной памяти? - PullRequest
0 голосов
/ 02 апреля 2019

У меня есть приложение, работающее в java8 и Tomcat 8.5. Я запускаю тесты против него, и я думаю, что есть утечка памяти, как будто я запускаю серию POST (вызовы REST передают данные в БД), я получаю сообщение «java.lang.OutOfMemoryError: Превышен лимит накладных расходов GC». На данный момент я в значительной степени использую все значения по умолчанию. Сообщения, которые я делаю, не огромны, и я оставляю промежуток в 3 секунды между каждым сообщением.

Я заметил, что объем памяти Tomcat JVM по умолчанию довольно мал (126 при запуске с максимальным значением 252). Когда я подключаюсь с помощью jconsole, он показывает, что «PS Old Gen» почти все время максимально загружен, пространство Survivor не сильно перемещается, а пространство Eden поднимается и опускается, но достигает 99% / 100% до появления ошибки. Если я использую tomcat8w.exe, чтобы увеличить объем памяти до 2 ГБ, проблема исчезнет.

Что я пытаюсь понять, так это то, как я выясняю, есть ли утечка памяти или просто системе требуется больше выделенной памяти?

Если моя ошибка вызвана попаданием Eden Space на 100%, это означает, что нет утечки памяти, поскольку это, вероятно, означает, что объекты зависали достаточно долго, чтобы перемещаться вверх по куче, и это должно быть «PS Old Gen» «что заполняет, или это то, что JVM может потерять след объектов, и поэтому они заполняют пространство Eden и никогда не двигаются дальше?

1 Ответ

0 голосов
/ 03 апреля 2019

Если я использую tomcat8w.exe, чтобы значительно увеличить объем памяти до 2 ГБ, проблема исчезнет.

Используйте этот предел и продолжайте мониторинг системы в течение нескольких дней.Если занятость старого поколения после крупных коллекций (то есть, пик общей модели качелей) выравнивается при некотором значении, то это, вероятно, не утечка.Если пиковая занятость старого поколения продолжает расти, это, вероятно, утечка.

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