JBoss 在没有更多线程可用时阻止 keep-alive

JBoss preventing keep-alive when no more thread available

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

例如,如果我在 the HTTP connector config 中设置 maxThreads="4" 并执行超过 4 个模拟请求,则:

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

我快速浏览了 Tomcat code(JbossWeb,Jboss 的 Web 容器基于此)。

如果允许连接保持活动状态,Http11Processor 不会从处理方法中显示 return。因此保持活动连接在连接打开时使用 HTTP 池的线程。

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