1

我正在使用具有 Tomcat Servlet Container 5.5 的 JBoss 4.0.4 GA。我也有 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 响应,套接字都会关闭(在 TCP 层发送 FIN)。这会导致严重的减速,因为应用程序在 WAN 上运行。(每关闭一个socket,需要再建立一个,耗时500ms)。

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

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

不知道是不是连接器有bug,还是我的配置有问题?

在此先感谢,
亨利。

4

2 回答 2

1

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

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

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

从一个下载镜像中获取 -chunked 二进制文件,并在 1.2.27 发行说明中了解如何配置分块编码(您必须获得正确的构建,并在您的配置中启用它)。您可以验证连接器是否在调试登录时使用分块编码,并且 TCP/Wireshark 跟踪应显示连接被重用。

如果您仍然获得关闭的连接,并且日志显示连接器正在尝试(或应该尝试)分块编码,那么最好在用户列表上进行讨论,然后在您使用另一个 Wireshark 跟踪 + 连接器调试日志重新打开'确定有问题。

所以,我做了什么:

  1. 放置带有分块支持的 isapi_redirect.dll。
  2. 使用以下内容配置 isapi_redirect.properties:

    enable_chunked_encoding=1

  3. 重新启动 IIS。

于 2009-01-29T12:38:37.853 回答
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(包括底部的“A sample worker.properties”部分)。看看那里提到的任何参数是否对您有帮助。

于 2009-01-27T16:27:06.367 回答