4

我们正在运行 jBoss 5.1,它又使用 Tomcat servlet 容器。

我们已经看到一些错误的 HTTP 客户端会打开套接字、发出 HTTP 请求、无法读取所有数据以及无法关闭连接的情况。

结果是 tomcat 线程无限期地阻塞尝试写入输出流:

SocketOutputStream.socketWrite0(FileDescriptor, byte[], int, int) 
SocketOutputStream.socketWrite(byte[], int, int) 
SocketOutputStream.write(byte[], int, int)  
InternalOutputBuffer.realWriteBytes(byte[], int, int) 
ByteChunk.flushBuffer()
ByteChunk.append(byte[], int, int)
InternalOutputBuffer$OutputStreamOutputBuffer.doWrite(ByteChunk, Response)
IdentityOutputFilter.doWrite(ByteChunk, Response)
InternalOutputBuffer.doWrite(ByteChunk, Response) 
Response.doWrite(ByteChunk)
OutputBuffer.realWriteBytes(byte[], int, int) 
ByteChunk.append(byte[], int, int) 
OutputBuffer.writeBytes(byte[], int, int) 
OutputBuffer.write(byte[], int, int)    
CoyoteOutputStream.write(byte[], int, int)

如何将这些连接配置为超时?

4

3 回答 3

1

你可以把Apache放在它前面。严重地。

于 2009-08-14T16:09:29.367 回答
1

使用默认连接器时似乎没有任何超时。NioConnector 似乎确实有写入超时(尽管围绕此的源代码中有一些 TODO 注释)。

因此,如果您想进行一些测试,请使用 NioConnector,并设置未记录的 'timout' 选项 - 源代码可能暗示 disableUploadTimeout 必须为 'false' 才能生效。

基本上,在您的 server.xml 中,将 http Connector 元素更改为如下内容:

<Connector port="8080" protocol="org.apache.coyote.http11.Http11NioProtocol" 
  timeout="60000"
  disableUploadTimeout="false"        
  connectionTimeout="20000" 
  redirectPort="8443" />

(从一个默认的tomcat 6.0.20 server.xml文件,增加了timeout和disableUploadTimeout属性,protocol属性改为“org.apache.coyote.http11.Http11NioProtocol”)

mod_jk 似乎确实有一些超时设置,并且应该比 mod_proxy 更紧密地与 apache 合作。

于 2009-08-14T17:19:08.103 回答
0

此页面上是否有任何有助于超时的内容?http://tomcat.apache.org/connectors-doc/generic_howto/timeouts.html

于 2009-08-14T16:14:40.247 回答