转一个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