tomcat 7 - 性能:连接器标志connectionTimeout

时间:2013-04-11 11:26:16

标签: performance ssl tomcat7 connector

从tomcat 5.5迁移到tomcat 7.0.37时遇到了一个奇怪的行为。 我使用标准的https连接器:

<Connector address="x.x.x.x" port="9090" scheme="https" secure="true"
  clientAuth="false" sslProtocol="TLS" SSLEnabled="true" 
  ciphers="SSL_RSA_WITH_RC4_128_MD5,SSL_RSA_WITH_RC4_128_SHA,
        TLS_RSA_WITH_AES_128_CBC_SHA,TLS_DHE_RSA_WITH_AES_128_CBC_SHA,
        TLS_DHE_DSS_WITH_AES_128_CBC_SHA,SSL_RSA_WITH_3DES_EDE_CBC_SHA,
        SSL_DHE_RSA_WITH_3DES_EDE_CBC_SHA,
        SSL_DHE_DSS_WITH_3DES_EDE_CBC_SHA" 
  URIEncoding="UTF-8" keystorePass="x" keystoreFile="x" 
  connectionTimeout="-1" maxPostSize="-1" />

当设置了标志connectionTimeout="-1"时,对Tomcat的每个请求都会导致20%-30%的处理器使用率不变。因此,在为任何类型的资源(简单的html页面,jar文件)生成5个请求之后,处理器使用率达到100%。

当我删除connectionTimeout="-1"标志时,不会发生此行为。我使用标准的Tomcat 7配置。

有人可以解释发生了什么吗?

1 个答案:

答案 0 :(得分:1)

我花了一分钟来解决这个问题。我也能够重现这个问题。查看documentation的http连接器。它并没有说你可以将它设置为-1,但它并没有说你也不能。所以我潜入了代码,以确定。在代码中我找到了下面的内容(soTimeout = connectionTimeout)

if (soTimeout != null && soTimeout.intValue() >= 0)
  socket.setSoTimeout(soTimeout.intValue());

所以基于-1,永远不会设置-1并且套接字java class使用默认设置。

如果您想要无限超时,请将其设置为0(我不建议这样做会带来各种问题。)

编辑#1

进一步了解这一点,似乎tomcat中有一个bug,我已经报告过,并且将在7.0.42开始。