当没有更多线程可用时,JBoss阻止保持活动状态

时间:2015-09-08 13:31:40

标签: http jboss jboss5.x keep-alive persistent-connection

在试验我的JBoss 5.1服务器之后,我注意到如果当前线程是最后一个可用的,HTTP响应包含Connection: close标头。

例如,如果我在the HTTP connector config中设置maxThreads="4"并执行4个以上的同时请求,那么:

  • 3个第一个回复不包含任何Connection标题(表示连接可以是reused by the client for future requests
  • 所有下一个请求都包含Connection: close标头(意味着客户端必须在不同的端口上为下一个请求创建新连接)

我找不到任何相关文档。这种行为是在某处解释的吗?是否可以避免它(即阻止此Connection: close标头),以便客户端可以重用套接字以用于将来的请求?

1 个答案:

答案 0 :(得分:0)

我快速浏览了Tomcat code(Jboss的Web容器是JbossWeb的基础)。

如果允许连接保持活动状态,它会在Http11Processor中显示从进程方法返回。因此,当连接打开时,保持活动连接正在使用HTTP池的线程。

为了防止池被非活动的保持连接清空​​,线程池很可能(我已经发现可能在PooledSender中执行的代码的某些部分)禁用了保留池的可能性在开始处理新请求之前,为其池中的最后一个线程打开连接。否则,通过创建有限数量的保持活动连接来阻止Tomcat / Jboss将非常容易。