@luckduck1

Как устранить утечку памяти Spring (MVC, Security) + Hibernate + Tomcat?

Есть приложение на Sprimg (MVC, Security) + Hibernate, запускаю на Tomcat. В приложении около 50 таблиц в БД, 80 моделей и т.д. (такое количество видимо из-за неправильного понимания реализации связей между таблицами)
Если вдруг нужен, код: https://github.com/StepanovNickolay/myCRM

При запуска происходят утечки памяти:

  • Если запустить приложение и оставить не трогая, то используемая память медленно увеличивается с 150Мб до 650Мб, затем видимо срабатывает GC и память вновь становится 100Мб. Вот как это выглядит в VisualVM:
    1a7eaeb5cd34400898d5afa2b268b38c.png
  • Если после запуска активно переходить по всем вкладкам и очень активно использовать приложение, то происходит то же самое, только куда быстрее.


Как это можно пофиксить?

+ еще вопрос:
Приложение буду загружать на хостинг и его будет использовать 10-20 человек. Нужно выбрать тариф и рассчитать объем памяти. Если сейчас я один расходую 150-650Мб, значит ли это, что 3 человека будут расходовать в 3 раза больше?
  • Вопрос задан
  • 730 просмотров
Пригласить эксперта
Ответы на вопрос 1
Вы уверены, что это утечка? Похоже даже в состоянии простоя приложение что-то постоянно обрабатывает, создает объекты, которые затем не использует. Эти неиспользуемые объекты сборщик и удаляет. Иначе у вас рос бы минимальный объем памяти после работы сборщика.
Понаблюдайте за объектами в куче, определите какие объекты удаляются после сборки мусора в большом количестве и найдите место в коде, где они создаются. А дальше уже думать, может и не надо их создавать постоянно.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы