http响应完成后,Tomcat / IIS关闭套接字

时间:2009-01-27 15:58:31

标签: java iis tomcat jboss tcp

我正在使用JBoss 4.0.4 GA,它有Tomcat Servlet Container 5.5。 我也将IIS 6.0重定向到这个JBoss。 (通过IIS tomcat连接器,用作IIS中的ISAPI筛选器)。 一切正常,按照描述配置工人。

这是连接器的一段workers.properties文件:

#
# Defining a worker named ajp13 and of type ajp13
# Note that the name and the type do not have to match.
#
worker.jboss0_ajp13.port=8009
worker.jboss0_ajp13.type=ajp13
worker.jboss0_ajp13.host=localhost
worker.jboss0_ajp13.socket_keepalive=1
worker.jboss0_ajp13.socket_timeout=300

但是当通过IIS(端口80)连接到应用程序时,对于HTTP请求的每个已完成的HTTP响应,套接字将关闭(FIN在TCP层上发送)。 这导致严重的减速,因为应用程序正在通过WAN工作。 (对于每个关闭的套接字,需要建立另一个套接字,需要500毫秒)。

直接连接到JBoss Web服务器时不会发生这种情况,并且在连接到IIS的同一WebServer实例上的其他虚拟目录时也不会发生这种情况(即IIS中的Keep-Alive也已配置)。

最新版本的tomcat IIS连接器会发生这种情况。

您知道连接器中是否有错误,或者我的配置是否有问题?

提前致谢,
亨利。

2 个答案:

答案 0 :(得分:1)

我在Bugzilla中为tomcat IIS重定向器提交了一个错误,这就是我得到的答案:

  

直到1.2.27这是IIS连接器的行为(IIS强制所有   ISAPI扩展实现自己的HTTP保持活动,以及IIS连接器   没有这样做。)

     

在1.2.27中,实验性,构建时,对HTTP 1.1的支持   编码,应允许持久连接。   (我在生产系统中使用了大约相同的代码,大约4个   年,但它应该被认为是JK代码库中的实验,直到它   已经稳定了一段时间。)

     

从其中一个下载镜像中获取-chunked二进制文件并阅读有关如何操作的信息   在1.2.27发行说明中配置chunked编码(你必须得到   正确构建,并在您的配置中启用它)。   您可以验证连接器是否正在使用带有调试日志记录的分块编码   on,并且TCP / Wireshark跟踪应该显示正在重用的连接。

     

如果你仍然在关闭连接,并且日志显示了   连接器尝试(或应该尝试)分块编码,然后它   可能最好在用户列表上讨论,然后重新打开另一个   一旦确定存在问题,Wireshark跟踪+连接器调试日志。

所以,我做了什么:

  1. 将isapi_redirect.dll与分块支持放在一起。
  2. 使用以下命令配置isapi_redirect.properties:

    enable_chunked_encoding=1

  3. 重新启动IIS。

答案 1 :(得分:0)

IIS可能正在关闭套接字。 JBoss和IIS 之间的连接与持久存在的HTTP套接字无关。确保将IIS配置为支持持久性HTTP / 1.1套接字。

但是,您指出IIS中的另一个虚拟目录没有相同的问题。这可能是特定虚拟目录出现问题的问题。但是, 也可以是IIS / Tomcat连接器中的东西。

要调查它是否是IIS / Tomcat连接器,请尝试设置

worker.jboss0_ajp13.connection_pool_size = 10 worker.jboss0_ajp13.connection_pool_timeout = 600

看它是否有任何区别。请参阅Tomcat Workers Docs(包括底部的“示例worker.properties”部分)。看看那里提到的任何参数是否可以帮助你。