为什么我的tomcat没有重用线程?

时间:2016-10-27 09:01:04

标签: java tomcat web-applications

我试图了解tomcat如何使用线程来处理请求。在进行负载测试时,我对Web应用程序有以下情况:

测试客户端向服务器发送“登录”请求。每个登录请求包含不同的用户凭证(即,Web应用程序为每个请求创建新会话)。请求以非常“好”的方式发送:测试客户端发送登录请求,等待特定时间,发送下一个登录请求等。

根据我对tomcat的理解,我希望有几个线程足以为传入的请求提供服务,因为请求是按顺序到达的。但是,发生了以下情况:我可以在JVM中看到线程数量正在上升(超过100),直到我得到着名的“OutOfMemory异常:无法创建本机线程”。增加“maxThreads”配置参数会延迟,但不会避免异常。

我不是一名tomcat专家,所以我的两个问题是:

  1. tomcat在很多会话中需要这么多线程是否正常?我认为所需线程的数量取决于并发请求的数量,而不取决于会话的数量。正如我写的,我没有并发请求。测试客户端在发送下一个请求之前会收到响应。
  2. 如果正常,这种行为可能是什么原因?难道有什么东西阻止tomcat重用空闲线程吗?我必须在哪个方向搜索?打开文件,数据库连接,......?
  3. 感谢您的评论

    编辑:netstat没有显示任何奇怪的内容。没有任何关系保持开放的时间超过他们应该的时间。

    编辑2:可能很重要:我正在使用tomcat 7(客户需求由于我不知道的原因)。据我所知,在线程列表中它使用了BIO,这在这里应该没什么区别。

0 个答案:

没有答案