博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
tomcat keepAliveTimeout=0问题
阅读量:2440 次
发布时间:2019-05-10

本文共 876 字,大约阅读时间需要 2 分钟。

      最近升级tomcat到7.0.70上线,之后几天服务端句柄很高,定位后发现是应用服务上有很多连接,但是实际没有这么多用户在线,在测试环境上重现,抓包发现在keepAliveTimeout=0的情况下,是客户端发起FIN包,而改为2000之后,则是服务端发FIN包,参考,keepAliveTimeout=-1表示永不断连才对的话,0应该是响应完立马断开连接呀;

     后来看了版本对应的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包

转载地址:http://rlcqb.baihongyu.com/

你可能感兴趣的文章
迁移wordpress_从WordPress.Com迁移到自托管WordPress
查看>>
文档编写软件_编写第一个软件文档的指南
查看>>
bootstrap组件_深入了解Bootstrap表单组件
查看>>
商品类别批量添加的前端开发_与批量类别创建者一起学习插件开发
查看>>
bootstrap步骤_通过8个简单步骤进行Bootstrap和WordPress主题集成
查看>>
struts2 css失效_CSS体系结构和可维护CSS的三大Struts
查看>>
您可能不知道WooCommerce可以做的10件事
查看>>
php使用nginx建网站_如何使用预建网站来刷新网站的外观
查看>>
wordpress快速建站_您的WordPress主题灵活还是快速?
查看>>
bootstrap布局技巧_加快Bootstrap网站的3个技巧
查看>>
bootstrap网格_Bootstrap网格:掌握最有用的Flexbox属性
查看>>
symfony 控制器_重新引入Symfony控制台-适用于未开始使用的CLI PHP!
查看>>
wordpress插件开发_WordPress插件开发简介
查看>>
响应式编程 函数式编程_Phunkie进行函数式编程:PHP中的解析器组合器
查看>>
composer 源l:_Visual Composer:名称更改的令人费解的故事
查看>>
使用React和PHP开发游戏:它们的兼容性如何?
查看>>
哈巴狗入门指南
查看>>
js设置css自定义变量_CSS变量实用指南(自定义属性)
查看>>
devtools使用_优化CSS:使用DevTools调整动画性能
查看>>
各运营商虚拟主机对比_满足您需求的最佳虚拟主机提供商
查看>>