Недостаточно памяти с превышением лимита GC при использовании ExecutorService в SpringBoot

Мы создали Spring Listener / Consumer, который принимает сообщения из ActiveMQ и сохраняет их в RDBMS. Это приложение работает постоянно. Мы использовали ExecutorService для Listener для получения сообщений. Его threadpoolsize = 15. Если приложение работает более часов, оно останавливается с ошибкой нехватки памяти.

  1. Кто-нибудь, пожалуйста, помогите найти причину этой ошибки.
  2. Как работает сборщик мусора с executorService, т.к. служба отключается только при остановке приложения.

person S RB    schedule 18.12.2019    source источник
comment
Что касается вашего первого вопроса, нам нужно увидеть код, который поможет нам обнаружить утечку памяти.   -  person Tasos P.    schedule 18.12.2019


Ответы (1)


У вас есть утечка памяти в вашем приложении или вы накапливаете объекты, которые должны быть собраны мусором. Вам следует использовать такое программное обеспечение, как JProfiler, чтобы определить причину.

Вы также можете увеличить объем оперативной памяти, доступной для JVM, но это только временное решение, если вы не исправите утечку.

Как работает сборщик мусора с executorService, т.к. служба отключается только при остановке приложения.

Ошибка сообщает вам, что он не может создать новый поток, потому что недостаточно памяти.

person klonq    schedule 18.12.2019
comment
Тот, кто проголосовал против этого, должен объяснить, почему. Термин «утечка памяти» может не применяться так же, как в таких языках, как C / C ++, но смысл такой же. OP создает данные, которые, вероятно, становятся доступными для потоков в ExecutorService, и не позволяет Java восстанавливать их. Вызывает сбой сборщика мусора и приводит к ошибке OOM. - person John Vint; 18.12.2019
comment
Один комментарий The error is telling you that it can't create a new thread because there isn't enough memory. Не совсем так. Приложение завершает работу, потому что, когда поток останавливает, доступные данные из этих потоков больше не достижимы и могут быть восстановлены виртуальной машиной. - person John Vint; 18.12.2019