一般来说,按照网上提供的一些方法,将Apache和多个Tomcat通过jk连接,进行集群负载是没有什么大的问题的,但当访问量增加得比较大而且峰值持续时间较长时,默认的一些配置就不够用了。
今天亲身经历了这样一个过程,apache的最大连接数调到了4500,但都还不够用,一会就跑满了。而Tomcat这边压力却不大,同时,发现mod_jk.log里面有很多这样的错误记录:
(tomcat) Tomcat is down or refused connection. No response has been sent to the client (yet) 或者connecting to backend failed. Tomcat is probably not started or is listening on the wrong port (errno=111)
google 一查,才知道是Apache和Tomcat的connectionTimeout参数设置得不同步造成的,默认的jk是不超时的,也就是说进行长连接,而Tomcat默认的时长是500ms,所以二者的超时时间不匹配,造成jk反复的重连Tomcat,全部都堵在了Tomcat这一端。
调优方法:在Tomcat的Connector节,增加如下配置:
connectionTimeout="200000" maxThreads="2000" acceptCount="500"
可解决该问题,Apache的连接数一下就降下来了