Tomcat NIO连接器在插座关闭时创建线程

时间:2015-03-11 13:08:31

标签: nio tomcat8

我使用JDK 1.7.71运行Tomcat 8.0.20,当我们用一个1000 Websocket 连接加载系统时,线程数在32-33之间(没有什么比它更多)从应用程序加载时开始)。但是,当测试运行停止时,套接字关闭,线程增加到最大值(200)。这些线程在那里挂了大约60秒然后就死了。

服务器代码如下:打开websocket时,会实例化webSockHandler的对象。有一个路由类(静态),它将任何传入消息发送给4个管理器之一。 4个管理器都是Runnable,它们卡在LinkedBlockingQueue的take()中。这些管理器很常见,并且没有专门为处理客户端请求而创建的线程。因此,无论我们是0还是100,我们应该是4个应用程序线程。

但是,在NIO套接字闭包和创建的线程上有一个明确的1:1链接。使用运行在Win 7,8或Ubuntu上的Tomcat可以重现该问题 - 因此它可能不是操作系统。为什么在客户端套接字关闭时会创建这些线程?我们能避免吗?或优化它?

其余的tomcat配置是默认配置(NIO连接器除外。即2个线程,最大线程数= 200等)

**编辑:粘贴一些代码段** 我想知道我应该发送什么代码代码..我会尽我所能。

*经理是:

public void run() {
    while ( keepRunning ) {
      Message msgToProcess;
      try {
        msgToProcess = myQueue.take(); //myQueue is of type LinkedBlockingQueue
        processMessage(msgToProcess);
      } <<Exception blocks>>
    }
  }

Websock处理程序是:

@ServerEndpoint(value="location")
public class Websock {

    Websock(){
        log.info("Consutructor:Creating a new instance for every socket ");
    }

    public void onClose(Session session, CloseReason closeReason) {
        ConnectionManager.removeClient(this);
    }
}

0 个答案:

没有答案