压力测试场景,前端nginx反向代理到4个tomcat实例,在其中的一个实例上产生了大量的countDownConnection Incorrect connection count
警告
WARNING [http-nio-8080-exec-48] org.apache.tomcat.util.net.AbstractEndpoint.countDownConnection Incorrect connection count, multiple socket.close called on the same socket.
另外一个异常是4个tomcat实例上都看到的NPE异常:
Exception in thread "http-nio-8080-AsyncTimeout" java.lang.NullPointerException
at org.apache.coyote.AbstractProcessor.doTimeoutAsync(AbstractProcessor.java:528)
at org.apache.coyote.AbstractProcessor.timeoutAsync(AbstractProcessor.java:518)
at org.apache.coyote.AbstractProtocol$AsyncTimeout.run(AbstractProtocol.java:1130)
at java.lang.Thread.run(Thread.java:745)
使用了servlet3.0,connector配置如下:
<Connector port="8080" protocol="org.apache.coyote.http11.Http11NioProtocol"
connectionTimeout="20000" redirectPort="8443" maxParameterCount="2000" maxKeepAliveRequests="-1"
maxThreads="200" maxPostSize="20971520" acceptCount="1024" useBodyEncodingForURI="true"
URIEncoding="UTF-8"/>
已将bug提交到了bugzilla,在这里记录一下,后续跟踪。
https://bz.apache.org/bugzilla/show_bug.cgi?id=58103
#已经有人修复了
但8.5.8里再次出现可能是另外地方引起的这个问题,未必是同一个bug,或者这个bug在9.0/8.5系列又被引入了。
AbstractProcessor.doTimeoutAsync 抛出 NPE 的问题导致 servlet 3.0 的 timeout 无法正常工作。