我面臨奇怪的問題。玻璃魚的Tyrus端點塊線程(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-thread-pools(涉及websockets)都被阻塞。
什麼會導致這樣的問題?我該如何應對?我需要提供其他東西嗎? 提前謝謝!
P.S.我正在使用關於線程池的默認Payara設置(如果可以的話)。