调整Tomcat连接器

时间:2016-01-11 16:41:32

标签: tomcat

我有一个Java Web服务,可以进行一些资源密集型数据处理。我正在尝试将此类Tomcat连接器属性调整为maxThreadsmaxConnectionsacceptCount,以防止服务过载。 我还创建了一个模拟服务生产负载的测试客户端。 在启动客户端几分钟后,我看到Tomcat以预期的方式运行。下面是此期间的典型CPU负载直方图。 Initial CPU load

然后我看到响应时间增加,并且在短时间内拒绝连接的数量达到100%。 让我感到惊讶的是CPU负载远远超过100%,其特点是“脉冲”。

CPU thready pulse

当前的连接器设置如下。

<Connector port="80" protocol="HTTP/1.1"
           connectionTimeout="4000" redirectPort="8443"
           minSpareThreads="8" maxThreads="12" maxConnections="24" acceptCount="8" />

有人可以为我的案例建议适当的价值吗?

2 个答案:

答案 0 :(得分:1)

  

有人可以为我的案例建议适当的价值吗?

找到“合适的”值并不简单。要了解拒绝连接达到100%的原因,您需要了解maxConnections="24"正在做什么。

上面的查找就像发送kill -3 <tomcat_pid>并观察catalina.out的线程转储输出一样简单。也许缺乏的资源可能不是CPU而是其他一些,例如数据库,严重执行的锁定,或者你甚至没想过的其他问题。

答案 1 :(得分:0)

事实证明,某些特定请求需要很长时间才能处理(几分钟)。 我发现(感谢伟大的工具VisualVM),随着线程数量的减少,所有这些线程都会在那些长时间运行的请求中占用。因此,尽管有可用的CPU容量,Tomcat仍拒绝所有新请求。 在针对那些长期运行的请求采取一些预防措施之后,该服务以所需的方式工作。