总结:Tomcat调优之acceptCount

问题背景:UI页面点击会偶尔返回error,检查调用日志,发现nginx报502报错,所以本文即排查502报错缘由。html

以下红框可知,访问本机个备机的服务502了,用时3秒左右(可见并非超时)nginx

先给出缘由:是由于tomcat8默认的acceptCount是100,请求量大的时候,会将一些来不及处理的请求塞到acceptCount,当acceptCount塞满的时候,请求会被丢弃,即咱们上面说的nginx报的502错误apache

解决方案:将acceptCount调大,目前线上调整到了10000,经16小时的观察,没有再报502错误,问题得以解决segmentfault

 

排查过程:tomcat

怀疑一:首先发现DB的压力突增,见图,可是DBA帮排查后,这个时间点并无慢查询,所以怀疑是不是服务器的问题服务器

 

怀疑二:是否是有一台服务有问题日志

可是经排查nginx日志,两台服务都有502出现。所以这个状况排除htm

怀疑三:tomcat的自己的问题。blog

因为nginx现实502的时候,时间有的只有3秒或者更小,所以也不是访问tomcat超时的,因此最大的可能就是tomcat丢弃了请求,经确认确实是丢弃了。队列

怎么证实这个推断呢?

首先:看请求是否进入tomcat了,好在咱们配置了tomcat的访问日志记录:配置以下:

日志:检查502请求的时间,在tomcat里面没有记录日志,可见并无进入tomcat,从而论证了上面的观点:502是由于请求被丢弃了。

那么为何会丢弃呢?

看了一些tomcat的默认配置,几个重要的配置:参考:https://tomcat.apache.org/tomcat-8.5-doc/config/http.html

 

可见很重要的一个:acceptCount是100,第一感官,过小了,超过这个队列就被丢弃了。

acceptCount解释:当maxConnections超过10000万(tomcat默认值是10000)的时候,会将多余的链接放到acceptCount中,即默认的tomcat能够支持的最大链接数是10000 + 100 = 10100;

当超过10100的时候,请求就会被丢弃,即nginx的502日志,解决方法:将acceptCount调整成10000。502问题得以解决。

注:

maxConnections与acceptCount的关系

 

参考文档:

https://tomcat.apache.org/tomcat-8.5-doc/config/http.html

http://www.javashuo.com/article/p-xnlqtnnt-kz.html

相关文章
相关标签/搜索