Я столкнулся со странной проблемой.Tyrus Endpoint Blocks Thread in Glassfish (Payara)
Мое приложение (работает с Payara 4.1.1.163) использует Websockets для отправки сообщений между клиентами. Для этой функции используется TyrusRemoteEndpoint.
После развертывания он хорошо работает около 3-4 дней, а затем (если приложение не было развернуто или перераспределены на этот раз) Тир внезапно блокирует поток (или даже нити) при вызове функции:
session.getBasicRemote().sendObject(obj);
Использование VisualVM Я сбросил все потоки и увидел следующее:
"http-thread-pool(56)" - Thread [email protected]
java.lang.Thread.State: WAITING
at sun.misc.Unsafe.park(Native Method)
- parking to wait for <6929ab6a> (a java.util.concurrent.CountDownLatch$Sync)
at java.util.concurrent.locks.LockSupport.park(LockSupport.java:175)
at java.util.concurrent.locks.AbstractQueuedSynchronizer.parkAndCheckInterrupt(AbstractQueuedSynchronizer.java:836)
at java.util.concurrent.locks.AbstractQueuedSynchronizer.doAcquireSharedInterruptibly(AbstractQueuedSynchronizer.java:997)
at java.util.concurrent.locks.AbstractQueuedSynchronizer.acquireSharedInterruptibly(AbstractQueuedSynchronizer.java:1304)
at java.util.concurrent.CountDownLatch.await(CountDownLatch.java:231)
at org.glassfish.tyrus.core.TyrusFuture.get(TyrusFuture.java:77)
at org.glassfish.tyrus.core.TyrusRemoteEndpoint$Basic.sendObject(TyrusRemoteEndpoint.java:183)
Кажется, что эта нить держится в вечном ожидании. Сообщения для этого клиента не отправляются.
Если я использую синхронизированные блоки, это даже вызывает тупик, и все пулы HTTP-потоков (что касается веб-узлов) блокируются.
Что может вызвать такую проблему? Как я могу с этим справиться? Должен ли я предоставить что-то еще? Спасибо заранее!
P.S. Я использую настройки Payara по умолчанию для пулов потоков (если это может помочь).