Tomcat connectionTimeout问题定位处理
2017-10-16 22:34
363 查看
问题现象
在某个时刻,后端收到了平时4-6倍的请求(保密起见,略去产品和事件),在10分钟后居然没有请求可以接进来问题原因
经过分析,首先,是后端服务器的线程池满了,线程池满的原因:1.server.xml中maxThread=512,导致超过512的之后的请求只能排队,等待有线程释放后,才能被处理;
2.connectionTimeout配置为10000,这个配置导致建立一个socket连接后,如果一直没有收到客户端的FIN,也没有数据过来,那么此连接也必须等到10s后,才能被超时释放,巧了,现网的客户端真的不会发FIN包过来,那一直陪它耗够10秒,和1一起,处理的512个线程只能等待10s后,超时释放才能处理后面排队的请求,所以浪涌一来,分分钟就满了。
接下来是怎么接不进来的呢?
部分用户忍不了了,发了个登出请求,依然在特慢的排队,部分进入了队列的客户端加上前面时间一共等了几秒都没响应,客户端就发了个FIN过来,说要不咱主动断开算了,后端收到请求变为CLOSE_WAIT状态,说你等我会,处理点事,巧了,用户这几秒也受不了了,整个重启客户端,客户端ip再来就变了,结果后端处理好后的第三次握手本该通知"我处理好了,你断吧"的请求发不过去,好死不死,后台还配的重发15次,重发15次需要大概20~30分钟左右,啊哦,于是这条请求一直占着线程20多分钟,这样的请求多点,线程就一直占着,于是别的请求就一直就接不进来咯
问题解决
1.修改maxThread=1024,提高一倍的线程数2.修改connectionTimeout=2000,没数据了之后2秒就断,别等这么久(keepAlivetimeout是请求处理完了之后等多久关闭连接,connectionTimeout是本条连接等多久没数据关连接)
3.修改/proc/sys/net/ipv4/目录下的tcp_retries2文件为4,别重发15次了,一般也用不了这么多
相关文章推荐
- tomcat connectionTimeout 问题
- Spring boot 在tomcat上部署 遇见 'JMX' server connection timeout 问题
- 临时处理tomcat僵死问题
- Tomcat 学习系列1 Tomcat8在win7下配置与使用 和常见问题处理
- Linux + tomcat问题处理以及Linux常用命令
- ASP.NET连接 MS SQL Timeout expired. 问题的处理
- tomcat 下catalina.out 日志乱码问题处理
- Tomcat Connector connectionTimeout含义和验证
- tomcat处理请求导致页面出现ERR_CONNECTION_RESET错误解决方案
- Spring4.1.0 - SpringMVC第一步,Tomcat服务器端正常,客户端无法响应JSP页面问题处理
- Tomcat在处理GET和POST请求时产生的乱码问题
- tomcat_javaweb项目域名打开网页是空白页面问题处理,但是加后缀可以访问
- Tomcat处理乱码问题终极版
- centos6 关于 ssh,svn,tomcat远程不能访问的问题处理过程
- (原创)项目部署-Tomcat设置默认访问项目及项目重复加载问题处理
- 解决HttpURLConnection setConnectTimeout超时无响应的问题
- js判断input输入框为空时遇到的问题 弹窗后,光标没有定位到输入框,而是直接执行我的处理页面程序
- tomcat7和redis的sessoin共享问题处理
- 对java处理tomcat中文乱码问题的理解
- 微信开发时遇到的UrlConnection乱码问题的处理