JMeter一个错误the target server failed to respond--JMeter坑

问题:1、在测试一个http景象,特别是集波动TPS时刻,出现了一个错误。它现在是一个必须错误(压力顺利时却零星的错误,甚至很少见);



每次必现错误(開始一直怀疑是网络或程序的问题)


  2、失败事务报错信息例如以下,我遇到的是以下的那种

  • Socket closed
  • Non HTTP response code: org.apache.http.NoHttpResponseException (the target server failed to respond)

资料查询:https://wiki.apache.org/jmeter/JMeterSocketClosed

问题原因:在JMeter下,发送http 请求时,一般都是默认选择了use keepAlive(这个是什么?看后面资料),这个是连接协议,JMeter坑就在这里,默认勾选了这个(假设不勾选的话,也不会保存)。但其配置JMeter.properties中的时间设置默认却是注销的,也是是说,不会等待,一旦连接空暇,则立刻断开了,导致我们压測中出现了事务失败的情形。

解决:改动httpclient4.idletimeout=<time in ms> 设置成自己认为合理的时间,一般可设置成10-60s(表示连接空暇10s后才会断开),注意这边单位是ms。

改动完毕后再次压測,错误不再有了。


*********************************************************

《版权归作者lzqinfen@126.com全部。请勿乱转载》

*****************************************相关资料------------------------------------------------------------------------

HTTP无状态协议和Connection:Keep-Aliveeasy犯的误区

名词解释:
HTTP无状态:无状态是指协议对于事务处理没有记忆能力,server不知道client是什么状态。从还有一方面讲,打开一个server上的网页和你之前打开这个server上的网页之间没有不论什么联系
假设你要实现一个购物车。须要借助于Cookie或Session或server端API(如NSAPI and ISAPI)记录这些信息,请求server结算页面时同一时候将这些信息提交到server
当你登录到一个站点时,你的登录状态也是由Cookie或Session来“记忆”的,由于server并不知道你是否登录
长处:server不用为每一个client连接分配内存来记忆大量状态,也不用在client失去连接时去清理内存。以更高效地去处理WEB业务
缺点:client的每次请求都须要携带对应參数。server须要处理这些參数
 
Keep-Alive:參考另外一篇文章HTTP Keep-Alive 具体解释
 
easy犯的误区:
1、HTTP是一个无状态面向连接的协议。无状态不代表HTTP不能保持TCP连接,更不能代表HTTP使用的是UDP协议(无连接)
2、从HTTP/1.1起。默认都开启了Keep-Alive。保持连接特性,简单地说。当一个网页打开完毕后,client和server之间用于传输HTTP数据的TCP连接不会关闭,假设client再次訪问这个server上的网页,会继续使用这一条已经建立的连接
3、Keep-Alive不会永久保持连接,它有一个保持时间。能够在不同的server软件(如Apache)中设定这个时间
 

版权声明:本文博主原创文章,博客,未经同意不得转载。

posted @ 2015-10-01 13:48  hrhguanli  阅读(3096)  评论(0编辑  收藏  举报