Утечка потоков в приложении Java - причина java .lang.OutOfMemoryError: невозможно создать новый собственный поток - PullRequest
0 голосов
/ 27 февраля 2020

Некоторый контекст: запуск процесса SpringBoot Java с '-Xms128m -Xmx4000m -Xss256k'. Приложение сложное и не может вставить его сюда (много объектов и логики). Приложение работает круглосуточно, и большая часть ее работы использует @Scheduled методы. Каждые несколько недель мы получаем: Could not open JPA EntityManager for transaction; nested exception is java.lang.OutOfMemoryError: unable to create new native thread”, и наш сервер также не может разрешить соединение S SH (возможно, память заполнена из-за этой утечки).

Я обнаружил, что, возможно, у меня утечка потоков, растущая каждый день около 2000 потоков, которые продолжают находиться в состоянии RUNNABLE. Пример такого вида потока:

"I/O dispatcher 3150" #38743 daemon prio=5 os_prio=0 tid=0x00007ff48f748000 nid=0x38d runnable [0x00007ff482f0b000]
   java.lang.Thread.State: RUNNABLE
        at sun.nio.ch.EPollArrayWrapper.epollWait(Native Method)
        at sun.nio.ch.EPollArrayWrapper.poll(EPollArrayWrapper.java:269)
        at sun.nio.ch.EPollSelectorImpl.doSelect(EPollSelectorImpl.java:93)
        at sun.nio.ch.SelectorImpl.lockAndDoSelect(SelectorImpl.java:86)
        - locked <0x00000006da140f98> (a sun.nio.ch.Util$3)
        - locked <0x00000006da140f88> (a java.util.Collections$UnmodifiableSet)
        - locked <0x00000006da140e50> (a sun.nio.ch.EPollSelectorImpl)
        at sun.nio.ch.SelectorImpl.select(SelectorImpl.java:97)
        at org.apache.http.impl.nio.reactor.AbstractIOReactor.execute(AbstractIOReactor.java:257)
        at org.apache.http.impl.nio.reactor.BaseIOReactor.execute(BaseIOReactor.java:106)
        at org.apache.http.impl.nio.reactor.AbstractMultiworkerIOReactor$Worker.run(AbstractMultiworkerIOReactor.java:590)
        at java.lang.Thread.run(Thread.java:748)

Кто-нибудь имеет представление о том, что такое потоки и как устранить эту утечку?

Спасибо!

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