2013-04-11 57 views
2

当从tomcat 5.5迁移到tomcat 7.0.37时,我遇到了一个奇怪的行为。 我使用标准的https连接器:tomcat 7 - 性能:连接器标志connectionTimeout

<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文件)的请求之后,处理器使用率达到100%。

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

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

回答

1

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

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

因此,基于关闭该-1永远不会得到设置和插座的java class使用的是默认设置。

如果你想要一个无限超时设置为0(我不推荐,因为这可以为您带来各种问题。)

编辑#1

看起来有点更深这个似乎在tomcat中有一个bug,我已经报告过,并且将在7.0.42之后。