在测试环境发现了一个问题,每次服务器重启后,所有对新浪微博的请求都可以正常的发出,但从第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(传输控制协议)是互联网中最主要的协议之一,属于OSI模型中的第四层——传输层,提供面向连接的可靠数据传输服务。在TCP通信过程中,每一个连接...
4. **开放平台&朋友圈**:企业可以利用开放平台分享内容,通过朋友圈进行社交营销。 微信营销的主要特点包括: 1. **沟通多样**:支持文字、语音、视频等多种交流方式。 2. **便捷低成本**:相比传统营销,微信...
在IT行业中,模拟网络、CPU和内存耗尽的环境是一种重要的测试和调试技术。这种环境可以帮助开发者和系统管理员了解在极端条件下,他们的软件或硬件如何表现,以及如何优化资源使用和处理性能瓶颈。以下是对这些工具...
Windows Server 2008 R2 内存耗尽解决方案 Windows Server 2008 R2 是微软公司推出的服务器操作系统之一,但是在实际使用中,可能会出现内存耗尽的问题,导致服务器性能下降,影响业务运行。于是,微软官方发布了...
### 耗尽层电容:理解半导体器件中的关键概念 在深入探讨耗尽层电容之前,我们先来理解一下基本的背景知识。半导体器件是现代电子技术的核心,其性能和特性很大程度上取决于其中的电容效应。电容,作为存储电荷的...
现在回到问题本身,当出现"结果集已耗尽"的异常,通常有以下几种情况: 1. **循环遍历结果集时未正确检查结束条件**:最常见的情况是,程序员在for-each或while循环中遍历结果集,但没有在循环条件中检查`ResultSet...
根据导电方式的不同,MOSFET又分增强型、耗尽型。所谓增强型是指:当VGS=0时管子是呈截止状态,加上正确的VGS后,多数载流子被吸引到栅极,从而“增强”了该区域的载流子,形成导电沟道。 N沟道增强型MOSFET基本上是...
为了优化内存使用和链接管理,开发者需要定期进行性能测试和压力测试,分析GC日志,识别可能的性能瓶颈,并根据实际情况调整JVM参数,如设置合适的堆大小、新生代和老年代比例、GC策略等。 总的来说,理解和监控...
C-C++内存耗尽常常遇到,在这里有各种耗尽情况的处理办法
由于其流行性和开源特性,Android的普及率和开放性使其成为恶意攻击者的理想目标。 接着,文章详细介绍了Android权限模型的工作原理。Android的安全机制首先通过权限系统来限制应用的行为,这意味着应用在执行某些...
标题《GE 非耗尽型电解液氧电池 说明.pdf》和描述《GE 非耗尽型电解液氧电池 说明pdf,GE 非耗尽型电解液氧电池 说明》暗示着本文件是关于通用电气(GE)公司生产的非耗尽型电解液氧电池的技术说明书。根据给出的部分...
本压缩包文件“基于计量自动化系统平台的典型计量故障分析.rar”主要探讨了在实际运行中,MAS平台可能遇到的各种故障及其解决策略。以下是针对该主题的详细分析: 1. 计量自动化系统平台概述: 计量自动化系统平台...
耗尽关机传感器行业(2021-2026)企业市场突围战略分析与建议.docx
本文将深入探讨“ORACLE CPU 耗尽内存”这一问题,以及可能导致此类情况的原因、影响和解决方案。 当Oracle数据库的CPU耗尽内存时,这通常意味着数据库的进程或操作正在过度占用系统资源,导致系统响应速度减慢,...
总的来说,场效应晶体管可区分为耗尽型和增强型两种。耗尽型场效应晶体管(D-FET)就是在0栅偏压时存在沟道、能够导电的FET;增强型场效应晶体管(E-FET)就是在0栅偏压时不存在沟道、不能够导电的FET。
【企业容器云平台性能分析】 在当今的IT领域,企业越来越倾向于采用容器云平台来部署和管理应用程序。这种技术的兴起源于其灵活性、可移植性和资源利用率的提升。本篇内容将深入探讨PaaS(Platform-as-a-Service)...
因此,实时监控和分析系统的负载情况至关重要,以提前预防可能的问题。 负载率是评估系统健康状况的关键指标,它通过综合一段时间内的软硬件性能数据来计算得出。负载率的趋势分析则是通过对比当前负载率与历史平均...
便携式电子产品正向轻量化、超小型化...但是锂离子电池和其他很多类型的电池一样极易出现过充电、过放电等现象, 这些情况对锂离子电池更容易造成损害, 从而缩短它的使用寿命。所以要求锂电池充电应具有一级保护功能。
如果在不通电情况下,反型层不存在,电压加到一定程度后,反型层才出现,这个就是增强。相反,如果反型层一开始就存在,随着电压强弱,反型层会出现增加或者衰减,这个就是耗尽。 所以,对于高速低功耗应用来说,...
此外,pn结的建模不仅仅是对静态特性如耗尽区宽度的分析,还包括了动态特性,例如,pn结的耗尽区随时间变化而如何响应外加电压或电流。这是因为在集成电路中,器件常常工作在快速变化的信号条件下,对动态特性的理解...