Jmeter返回org.apache.http.NoHttpResponseException: The target server failed to respond解決辦法


1、問題:這段時間使用jmeter壓測時(300個請求,持續壓300s,加速期10s),壓力平穩時偶然錯誤,部分請求失敗事務報錯信息如下

org.apache.http.NoHttpResponseException: The target server failed to respond
at org.apache.http.impl.conn.DefaultHttpResponseParser.parseHead(DefaultHttpResponseParser.java:95)
at org.apache.http.impl.conn.DefaultHttpResponseParser.parseHead(DefaultHttpResponseParser.java:61)
at org.apache.http.impl.io.AbstractMessageParser.parse(AbstractMessageParser.java:254)
at org.apache.http.impl.AbstractHttpClientConnection.receiveResponseHeader(AbstractHttpClientConnection.java:289)
at org.apache.http.impl.conn.DefaultClientConnection.receiveResponseHeader(DefaultClientConnection.java:252)
at org.apache.http.impl.conn.ManagedClientConnectionImpl.receiveResponseHeader(ManagedClientConnectionImpl.java:191)
at org.apache.jmeter.protocol.http.sampler.MeasuringConnectionManager$MeasuredConnection.receiveResponseHeader(MeasuringConnectionManager.java:201)
at org.apache.http.protocol.HttpRequestExecutor.doReceiveResponse(HttpRequestExecutor.java:300)
at org.apache.http.protocol.HttpRequestExecutor.execute(HttpRequestExecutor.java:127)
at org.apache.http.impl.client.DefaultRequestDirector.tryExecute(DefaultRequestDirector.java:715)
at org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:520)
at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:906)
at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:805)
at org.apache.jmeter.protocol.http.sampler.HTTPHC4Impl.executeRequest(HTTPHC4Impl.java:517)
at org.apache.jmeter.protocol.http.sampler.HTTPHC4Impl.sample(HTTPHC4Impl.java:331)
at org.apache.jmeter.protocol.http.sampler.HTTPSamplerProxy.sample(HTTPSamplerProxy.java:74)
at org.apache.jmeter.protocol.http.sampler.HTTPSamplerBase.sample(HTTPSamplerBase.java:1146)
at org.apache.jmeter.protocol.http.sampler.HTTPSamplerBase.sample(HTTPSamplerBase.java:1135)
at org.apache.jmeter.threads.JMeterThread.process_sampler(JMeterThread.java:434)
at org.apache.jmeter.threads.JMeterThread.run(JMeterThread.java:261)
at java.lang.Thread.run(Unknown Source)

 

2、原因:在JMeter下,發送http 請求時,默認選擇了use keepAlive(Keep-Alive通俗地講,就是所謂的持久連接,對於http這種大量的短連接的服務來說,開啟持久連接的好處可節省大量的TCP連接過程的開銷,據apache的官方文檔稱對包含大量圖片的HTML文檔造成的延時起到50%的加速作用),這個是連接協議,JMeter坑就在這里,默認勾選了這個(如果不勾選的話,也不會保存),但其配置JMeter.properties中的時間設置默認卻是注銷的,不會等待,一旦連接空閑,則立即斷開了,導致壓測中出現了事務失敗的情形。

可訪問https://wiki.apache.org/jmeter/JMeterSocketClosed查看官網解釋

 

3、解決方法:

找到jmeter安裝路徑D:\apache-jmeter-3.2\bin下的jmeter.properties,編輯,設置httpclient4.idletimeout=<time in ms>,注意單位是ms,設置成覺得合理的時間,一般可設置成10-60s(表示連接空閑10s后才會斷開)。修改完成后再次壓測,錯誤就沒出現。

例:httpclient4.idletimeout=3000,意思是連接空閑3s才會斷開

 

4、KeepAlive

日常在瀏覽器查看請求頭也可看到KeepAlive,本章重點不在這里,有興趣可參考

http://blog.csdn.net/gaoshanliushui2009/article/details/8020240

http://liuzhigong.blog.163.com/blog/static/1782723752011412551547/

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM