jWebsocket有很多停放的线程(等待)



我在java服务器应用程序中使用jWebsocket库执行一些压力测试(每分钟数千个连接),过了一会儿,进程完全被jWebsocket线程填充,例如:

"jWebSocket TCP-Engine NIO writer" prio=10 tid=0x0000000000bf6000 nid=0x2eb9 waiting on condition [0x00007f1533bd9000]
   java.lang.Thread.State: WAITING (parking)
    at sun.misc.Unsafe.park(Native Method)
    - parking to wait for  <0x000000062ab06e80> (a java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject)
    at java.util.concurrent.locks.LockSupport.park(LockSupport.java:186)
    at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:2043)
    at java.util.concurrent.LinkedBlockingQueue.take(LinkedBlockingQueue.java:442)
    at java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1068 )
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1130)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
    at java.lang.Thread.run(Thread.java:745)

(上面的输出是从线程转储中检索的)

有人遇到过这个问题吗?有什么解决办法吗?

谢谢!

编辑。

最大的问题是线程永远不会终止,并且在应用程序终止之前一直保持活动状态。

这是正常情况,您的线程池由于高负载而显著增长,然后负载下降。在这种情况下,池中的大多数线程都在等待新任务的到来。

你可以通过改变核心池大小和最大池大小来杀死空闲的工人:

executor.setCorePoolSize(x);
executor.setMaximumPoolSize(y);

相关内容

  • 没有找到相关文章

最新更新