Некоторый контекст: запуск процесса 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)
Кто-нибудь имеет представление о том, что такое потоки и как устранить эту утечку?
Спасибо!