最近在對Tomcat服務器的web應用進行性能測試的過程中,有時LoadRunner中總會報錯:
Action.c(71): Error -27791: Server "localhost" has shut down the connection prematurely
但是這個錯誤并不是每次測試都會出現,通常在長時間的測試之后才偶爾出現,而奇怪的是在Tomcat的日志中并沒有相應的錯誤。從出錯信息的字面信息來看,應該是服務器由于某些原因關閉了連接,而Tomcat并不認為這是一個錯誤,因此沒有在日志中記錄下來。在網上的搜索中看到,這個錯誤在其他的服務器如WebLogic、IIS等均有發生,看來是一個通用的問題。
在診斷的過程中,發現Tomcat運行界面有時會提示:“ 嚴重: All threads (10) are currently busy, waiting. Increase maxThreads (10) or check the servlet status ”,根據這一線索對Tomcat的server.xml中的maxThreads、connectionTimeout參數進行配置,解決了這個問題。
試驗
為了驗證這兩個參數對測試結果的影響,我做了一些試驗。
測試場景:一個測試腳本、20個虛擬用戶、10次迭代
參數設置及相應運行結果:?
maxThreads |
connectionTimeout (豪秒) |
錯誤個數 |
5 |
1000 |
16 |
10 |
1000 |
13 |
15 |
1000 |
7 |
20 |
1000 |
0 |
5 |
10000 |
1 |
10 |
10000 |
0 |
15 |
10000 |
0 |
20 |
10000 |
0 |
試驗結論
當最大線程數較少、超時時間較短時,出現這個錯誤的次數就越多;隨著最大線程數逐步接近并發用戶數,該錯誤逐漸減少。另外,延長超時時間也能夠減少錯誤的出現,但這時由于請求在處于排隊狀態,因此會增加響應時間。
引申
將該結果應用于性能調優中,在一定的負載壓力下,增加最大線程數能夠有效的提高服務器的并發處理能力,但前提是系統資源如CPU、內存等不會成為系統瓶頸,在不能再提高最大線程數時,也可以用增加超時時間的方法,但這會造成響應時間的增加。參數最佳設置根據具體應用和測試結果而定。在有條件的情況下,最好就是集群了。
附:
當以上錯誤出現在用到web_reg_save_param函數的響應中時,會伴隨著其他錯誤:
Action.c(248): Error -26377: No match found for the requested parameter "ClientID". Check whether the requested boundaries exist in the response data. Also, if the data you want to save exceeds 10240 bytes, use web_set_max_html_param_len to increase the parameter size
Action.c(248): Error -26374: The above "not found" error(s) may be explained by header and body byte counts being 0 and 0, respectively.
更多文章、技術交流、商務合作、聯系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號聯系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元
