Jmeter使用過程中的坑之壓測過程報錯the target server failed to respond

問題:1、在測試某個http場景時,尤其是設置波動TPS時,出現了報錯,是必現錯誤(壓力平穩時卻是偶發錯誤,甚至很少能看到);

2、失敗事務報錯信息如下,我遇到的是下面的那種

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

資料查詢:JMeterSocketClosed

問題原因:在JMeter下,發送http 請求時,一般都是默認選擇了use keepAlive(這個是什麼?看後面資料),這個是連接協議,JMeter坑就在這裡,默認勾選了這個(如果不勾選的話,也不會出現問題),但其配置JMeter.properties中的時間設置默認卻是註銷的,也是是說,不會等待,一旦連接空閑,則立馬斷開了,導致我們壓測中出現了事務失敗的情形。

解決

1、修改httpclient4.idletimeout=<time in ms> 設置成自己覺得合理的時間,一般可設置成10-60s(表示連接空閑10s後才會斷開),注意這邊單位是ms。修改完成後再次壓測,錯誤不再有了。

2、或者直接不勾選這個(請求連接完成後就斷開,新請求時就再創建)

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

《版權歸作者lzqinfen@126.com所有,請勿亂轉載》

***************************相關資料**************

HTTP無狀態協議和Connection:Keep-Alive容易犯的誤區

名詞解釋:

HTTP無狀態:無狀態是指協議對於事務處理沒有記憶能力,伺服器不知道客戶端是什麼狀態。從另一方面講,打開一個伺服器上的網頁和你之前打開這個伺服器上的網頁之間沒有任何聯繫

如果你要實現一個購物車,需要藉助於Cookie或Session或伺服器端API(如NSAPI and ISAPI)記錄這些信息,請求伺服器結算頁面時同時將這些信息提交到伺服器

當你登錄到一個網站時,你的登錄狀態也是由Cookie或Session來「記憶」的,因為伺服器並不知道你是否登錄

優點:伺服器不用為每個客戶端連接分配內存來記憶大量狀態,也不用在客戶端失去連接時去清理內存,以更高效地去處理WEB業務

缺點:客戶端的每次請求都需要攜帶相應參數,伺服器需要處理這些參數

參考:Stateless protocol,What is stateless? Webopedia Definition

Keep-Alive:參考另外一篇文章HTTP Keep-Alive 詳解

容易犯的誤區:

1、HTTP是一個無狀態的面向連接的協議,無狀態不代表HTTP不能保持TCP連接,更不能代表HTTP使用的是UDP協議(無連接)

2、從HTTP/1.1起,默認都開啟了Keep-Alive,保持連接特性,簡單地說,當一個網頁打開完成後,客戶端和伺服器之間用於傳輸HTTP數據的TCP連接不會關閉,如果客戶端再次訪問這個伺服器上的網頁,會繼續使用這一條已經建立的連接

3、Keep-Alive不會永久保持連接,它有一個保持時間,可以在不同的伺服器軟體(如Apache)中設定這個時間

轉自:liuzhigong.blog.163.com
推薦閱讀:

Jmeter-正則表達式提取器詳解
Grinder-grinder安裝(源碼方式eclipse環境下安裝與配置)

TAG:jmeter | 性能测试 |