tomcat keepAliveTimeout=0问题
2017-04-12 16:56
232 查看
最近升级tomcat到7.0.70上线,之后几天服务端句柄很高,定位后发现是应用服务上有很多连接,但是实际没有这么多用户在线,在测试环境上重现,抓包发现在keepAliveTimeout=0的情况下,是客户端发起FIN包,而改为2000之后,则是服务端发FIN包,参考https://tomcat.apache.org/tomcat-7.0-doc/config/http.html,keepAliveTimeout=-1表示永不断连才对的话,0应该是响应完立马断开连接呀;
后来看了版本对应的tomcat源码,找到了问题所在。在升级之前是bio,断连时的逻辑为
后来看了版本对应的tomcat源码,找到了问题所在。在升级之前是bio,断连时的逻辑为
if ((now-access)>socket.getTimeout()) { processSocketAsync(socket,SocketStatus.TIMEOUT); }升级后使用nio,断连逻辑为
boolean isTimedout = timeout > 0 && delta > timeout; if (close) { key.interestOps(0); ka.interestOps(0); // avoid duplicate stop calls processKey(key, ka); } else if (isTimedout) { key.interestOps(0); ka.interestOps(0); cancelledKey(key, SocketStatus.TIMEOUT, true); }同样,升级后版本bio的断连逻辑为
if (socket.getTimeout() > 0 && (now - access) > socket.getTimeout()) { socket.setTimeout(-1); processSocketAsync(socket, SocketStatus.TIMEOUT); }问题就在多了个getTimeout()>0啊(这个值就是我们配置的keepAliveTimeout)导致的结果就是负数和0其实都是一直不释放,结果服务端连接一直眼巴巴等着客户端发FIN包
相关文章推荐
- eclipse中tomcat容器启动工程timeout问题解决
- tomcat connectionTimeout 问题
- 解决Tomcat中的timeout问题
- Tomcat connectionTimeout问题定位处理
- mysql wait_timeout 8小时问题解决,tomcat数据源的配置
- Eclipse中启动Tomcat出现Timeout的问题
- Spring boot 在tomcat上部署 遇见 'JMX' server connection timeout 问题
- tomcat下调试jsp的常见问题(一)
- Tomcat 部署应用问题一网打尽
- 我的百宝箱之tomcat5中文问题解决之道
- 解决在Eclipse中配置JBoss、Tomcat等插件时遇到的问题 (转)
- Tomcat 5.5.2 中文显示问题
- tomcat5中文问题解决之道(转载)
- TOMCAT JavaService的汉字问题
- tomcat配置多个域名的问题
- Tomcat初次使用问题手记
- 解决Tomcat5.0.19中文参数传递的问题
- tomcat与oracle冲突问题
- tomcat 5.X 的mysql DBCP配置指南及相关问题小结
- Tomcat的中文问题的java解决之道