[Jmeter併發報錯解決方案]org.apache.http.NoHttpResponseException: 10.0.4.147:8000 failed to respond

 

背景:公司模型框架是Nginx+uwsgi+Django+nginx,一開始使用Jmeter進行高併發請求測試,發現成功率只有50%,換用postman,成功率100%,代碼進行高併發同樣不會報錯。java

問題:python

Jmeter進行高併發,第一個接口成功,第二個失敗,第三個又成功,第四個失敗。。。依次類推,保持50%的失敗率,失敗報錯以下:nginx

org.apache.http.NoHttpResponseException: **.**.**.***:***** failed to respond at org.apache.http.impl.conn.DefaultHttpResponseParser.parseHead(DefaultHttpResponseParser.java:141) at org.apache.http.impl.conn.DefaultHttpResponseParser.parseHead(DefaultHttpResponseParser.java:56) at org.apache.http.impl.io.AbstractMessageParser.parse(AbstractMessageParser.java:259) at org.apache.http.impl.AbstractHttpClientConnection.receiveResponseHeader(AbstractHttpClientConnection.java:281) at org.apache.http.impl.conn.DefaultClientConnection.receiveResponseHeader(DefaultClientConnection.java:257) at org.apache.jmeter.protocol.http.sampler.hc.ManagedClientConnectionImpl.receiveResponseHeader(ManagedClientConnectionImpl.java:199) at org.apache.jmeter.protocol.http.sampler.MeasuringConnectionManager$MeasuredConnection.receiveResponseHeader(MeasuringConnectionManager.java:212) at org.apache.http.protocol.HttpRequestExecutor.doReceiveResponse(HttpRequestExecutor.java:273) at org.apache.http.protocol.HttpRequestExecutor.execute(HttpRequestExecutor.java:125) at org.apache.http.impl.client.DefaultRequestDirector.tryExecute(DefaultRequestDirector.java:684) at org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:486) at org.apache.http.impl.client.AbstractHttpClient.doExecute(AbstractHttpClient.java:835) at org.apache.http.impl.client.CloseableHttpClient.execute(CloseableHttpClient.java:83) at org.apache.jmeter.protocol.http.sampler.HTTPHC4Impl.executeRequest(HTTPHC4Impl.java:654) at org.apache.jmeter.protocol.http.sampler.HTTPHC4Impl.sample(HTTPHC4Impl.java:413) at org.apache.jmeter.protocol.http.sampler.HTTPSamplerProxy.sample(HTTPSamplerProxy.java:74) at org.apache.jmeter.protocol.http.sampler.HTTPSamplerBase.sample(HTTPSamplerBase.java:1189) at org.apache.jmeter.protocol.http.sampler.HTTPSamplerBase.sample(HTTPSamplerBase.java:1178) at org.apache.jmeter.threads.JMeterThread.executeSamplePackage(JMeterThread.java:491) at org.apache.jmeter.threads.JMeterThread.processSampler(JMeterThread.java:425) at org.apache.jmeter.threads.JMeterThread.run(JMeterThread.java:254) at java.lang.Thread.run(Thread.java:748)

由於模型接口是用python寫的,報錯代碼顯示java,因此一開始認爲是Jmeter的問題,換了一個工具,postman,進行併發測試,果真沒有拋錯,可是學無止境,做爲一個優秀的測試工具,不該該有這個問題啊,因此繼續挖掘解決方案。apache

解決方案:併發

取消勾選Use Keep-alive,這樣鏈接就不會複用,也就不存在空閒超時,被服務端幹掉的狀況了。框架

但帶來的是性能的開銷,由於tcp每次都要關閉而後重建。tcp

 

參考:高併發

https://blog.csdn.net/z_erduo/article/details/81084003工具

相關文章
相關標籤/搜索