2

从 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 配置。

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

4

1 回答 1

1

我花了一分钟才弄清楚这个。我也能够重现这个问题。查看 http 连接器的文档。它没有说您可以将其设置为 -1,但也没有说您也不能。所以我潜入代码以确定确定。在我发现下面的代码中(soTimeout = connectionTimeout)

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

因此,基于 -1 永远不会被设置,并且 Socket java正在使用默认设置。

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

编辑#1

对此进行了更深入的研究,似乎我已经报告了tomcat中的一个错误,并将在7.0.42以后出现。

于 2013-06-29T00:27:34.603 回答