在测试环境发现了一个问题,每次服务器重启后,所有对新浪微博的请求都可以正常的发出,但从第9请求开始,请求耗时将变为40s左右。
问题要从9和40s这两个关键词开始,httpclient的代码如下:
ProtocolSocketFactory protocolSocketFactory = new EasySSLProtocolSocketFactory();
Protocol.registerProtocol("https", new Protocol("https", protocolSocketFactory, 443));
client.getHttpConnectionManager().getParams().setDefaultMaxConnectionsPerHost(8);
client.getHttpConnectionManager().getParams().setMaxTotalConnections(100);
client.getHttpConnectionManager().getParams().setConnectionTimeout(5000);
client.getHttpConnectionManager().getParams().setSoTimeout(5000);
client.getHttpConnectionManager().getParams().setTcpNoDelay(true);
client.getHttpConnectionManager().getParams().setLinger(40000);
client.getHttpConnectionManager().getParams().setParameter(HttpMethodParams.RETRY_HANDLER, new DefaultHttpMethodRetryHandler());
client.getHttpConnectionManager().getParams().setStaleCheckingEnabled(true);
可以看到我们设置了setDefaultMaxConnectionsPerHost为8,setLinger为40000,经过查询资料推测原因如下:
首先我们先要澄清几个概念
1、对于tcp请求来说,tcp的客户端服务端概念和http的不同,请求双方,哪边关闭请求,哪边就是tcp客户端,另一边就为服务端。
2、tcp的一个链接由4个值确定,源ip、源端口、目标ip、目标地址。
tcp状态图中有一个TIME_WAIT状态,也叫2MSL状态,该状态是为了保证在tcp客户端发给tcp服务端最后一个ACK能顺利到达的一个等待状态。若没有TIME_WAIT状态,tcp客户端将直接进入CLOSED 状态,但有时由于网络原因,ACK 响应丢失,tcp服务端收不到 ACK,将重发FIN,CLOSED 状态的tcp客户端将返回RST ,而不是ACK。将导致tcp服务器异常。
也就是为了这个原因,tcp的客户端将会把连接保留在2MSL状态一段较长的时间。在这段时间里等待重发的FIN。这里需要注意的是,在2MSL状态的连接是不可以被重新使用。
我们上面的代码设置了对单个站点只能有最大的连接8个,对于httpclient的应用,这8个连接只有8个端口,同一个ip。若在2MSL的时间里,8个请求都被耗尽,那么第9个请求就必须等待2MSL状态结束。
而新浪服务器估计是由于轮询的原因,会尽可能的保持着连接,所以接收到所有数据的httpclient应用,会发起关闭连接,此时就进入了2MSL的状态。
解决方案也很简单,增加连接数 setDefaultMaxConnectionsPerHost ,或减少2MSL状态(TIME_WAIT)setLinger 的时间。
分享到:
相关推荐
TCP端口耗尽分析报告.TCP端口耗尽分析报告.TCP端口耗尽分析报告.TCP端口耗尽分析报告.
JGRE:Android中的JNI全局引用耗尽漏洞分析
NULL 博文链接:https://listen-raining.iteye.com/blog/1962065
C-C++内存耗尽常常遇到,在这里有各种耗尽情况的处理办法
总的来说,场效应晶体管可区分为耗尽型和增强型两种。耗尽型场效应晶体管(D-FET)就是在0栅偏压时存在沟道、能够导电的FET;增强型场效应晶体管(E-FET)就是在0栅偏压时不存在沟道、不能够导电的FET。
模拟网络,CPU, 内存等耗尽的环境 networkEater CpuEater MemoryEater
根据导电方式的不同,MOSFET又分增强型、耗尽型。所谓增强型是指:当VGS=0时管子是呈截止状态,加上正确的VGS后,多数载流子被吸引到栅极,从而“增强”了该区域的载流子,形成导电沟道。 N沟道增强型MOSFET基本上是...
耗尽关机传感器行业(2021-2026)企业市场突围战略分析与建议.docx
微软官方windows server 2008 r2内存耗尽解决方案! 微软官方补丁
本例重点分析磁盘容量,如果应用系统出现存储容量耗尽 的情况,会导致应用系统负载率过高,最终引发故障。 应用系统的负载率 通过对一段时间内软硬件性能的运行 状况进行综合评分而获得。 负载率趋势 通过系统的...
GE 非耗尽型电解液氧电池 说明pdf,GE 非耗尽型电解液氧电池 说明
如果在不通电情况下,反型层不存在,电压加到一定程度后,反型层才出现,这个就是增强。相反,如果反型层一开始就存在,随着电压强弱,反型层会出现增加或者衰减,这个就是耗尽。 所以,对于高速低功耗应用来说,...
内存耗尽,系统缓慢崩溃
互联网行业报告:移动流量红利耗尽之后的“新常态”与“新思维”(29页),资源名称:互联网行业报告:移动流量红利耗尽之后的“新常态”与“新思维”(29页)互联网行业大变局:移动流量红利耗尽之后的“新常态”与...
很不错哦 关于电容分布,这是一部很好的资源。一定要下载。
某高手耗尽毕生精力总结的电脑技巧某高手耗尽毕生精力总结的电脑技巧某高手耗尽毕生精力总结的电脑技巧某高手耗尽毕生精力总结的电脑技巧
分析了SJ-LDMOS衬底辅助耗尽效应的产生机理,总结了当前国内外消除SJ-LDMOS衬底辅助耗尽效应的技术,比较了各种技术的比导通电阻与击穿电压的关系。最后,从设计技术、工艺及理论模型三个方面,对横向超结器件的发展方向...
错误信息提示最大内存已经耗尽,该如何解决呢?下面小编给大家解决PHP里大量数据循环时内存耗尽的问题,需要的朋友可以参考下
在纳米级MOSFET的建模中,不能忽略多晶硅耗尽层中的电势降。 针对完全耗尽的纳米级环绕栅MOSFET,开发了一种考虑多晶硅耗尽效应的连续电势模型和基于电势的漏极电流模型。 通过数值模拟验证了导出的分析模型的性能。