转一个apache ab测试的Failed request说明

我最近在用 ab ( ApacheBench ) 測試一個網站時發現結果報告中一直會出現 Failed requests,而且出現的次數非常高,我原本以為是壓力測試的結果有大部分是失敗的,但看觀看其他數據卻一點也不覺得有失敗,經過一番研究後才真正理解為何會出現 Failed request 數據。

如下壓力測試的結果:

 

Server Software:        Microsoft-IIS/7.5
Server Hostname:        example.com
Server Port:            80

Document Path:          /
Document Length:        35137 bytes

Concurrency Level:      1
Time taken for tests:   4.619462 seconds
Complete requests:      100
Failed requests:        99
   (Connect: 0, Length: 99, Exceptions: 0)
Write errors:           0
Keep-Alive requests:    100
Total transferred:      3543782 bytes
HTML transferred:       3507782 bytes
Requests per second:    21.65 [#/sec] (mean)
Time per request:       46.195 [ms] (mean)
Time per request:       46.195 [ms] (mean, across all concurrent requests)
Transfer rate:          749.00 [Kbytes/sec] received





先分析上述數據,我取得的第一份 HTML 文件得到的大小 ( Document Length ) 為  35,137 bytes,我總共發出要求共 100 次 ( Complete requests ),總 HTML 數據傳輸量 ( HTML transferred ) 為 3,507,782 bytes 感覺非常合理,實際的傳輸量大約是單一文件的 100 倍,所以我研判這 100 個 Request 的確有正確送出,但為何 Failed requests 會出現有 99  次的錯誤呢?

只要出現 Failed requests 就會多出現一行要求失敗的各原因的數據統計,分別有 Connect, Length, 與 Exception 三種,分別代表的意義為:

  • Connect      無法送出要求、目標主機連接失敗、要求的過程中連線被中斷
  • Length        回應的內容長度不一致 ( 以 Content-Length 標頭值為判斷依據 )
  • Exception   發生無法預期的錯誤

而從上述說明就可以很明顯看出所有的 Failed requests 都落在 Length 這個類別上,原來這是因為受測網站的首頁是動態的內容,當第一次發出 HTTP request 與後續發出的 HTTP request 所得到回應的 HTML 長度都是不同大小的 ( 每次回應的 Content-Length 大小不一致 ),才會引發 Failed requests 的 Length 問題的失敗,因此這類 Length 不一致的失敗在進行「動態網頁」壓力測試時是合理的,可以不予理會。

這裡的 Length 是以 "第 1 次" 取得的 Content-Length 為主,如果第 2 次以後的 HTTP Request 所得到的 HTTP Response Header 得到的 Content-Length 與第 1 次取得的長度不一致,就會得到 Length 的錯誤。

其他壓測結果欄位的說明可參考我另一篇文章:使用 ApacheBench 進行網站的壓力測試

 

转自:http://blog.miniasp.com/post/2009/10/Explain-ApacheBench-ab-for-the-Failed-request-field.aspx

猜你喜欢

转载自mib168.iteye.com/blog/1299990
今日推荐