从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配置。
有人可以解释发生了什么吗?
答案 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开始。