前言
使用ab壓力測試時候出現報錯apr_pollset_poll: The timeout specified has expired (70007),本篇總結了幾個ab常見的報錯和對應解決辦法
當並發數過大的時候,也會出現apr_socket_recv: Connection reset by peer (104)
apr_pollset_poll
如果出現apr_pollset_poll: The timeout specified has expired (70007),主要是timeout連接超時了,可以加個-k參數,讓連接KeepAlive
ab -c 10 -n 5000 http://47.104.x.x:8082/
[root@yoyo sbin]# ab -c 10 -n 5000 http://47.104.x.x:8082/
This is ApacheBench, Version 2.3 <$Revision: 1430300 $>
Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Licensed to The Apache Software Foundation, http://www.apache.org/
Benchmarking 47.104.190.48 (be patient)
Completed 500 requests
Completed 1000 requests
Completed 1500 requests
Completed 2000 requests
Completed 2500 requests
Completed 3000 requests
Completed 3500 requests
Completed 4000 requests
Completed 4500 requests
apr_pollset_poll: The timeout specified has expired (70007)
出現原因主要是timeout連接超時了,可以加個-k參數,讓連接keep-alive,另外還有-r 和-s參數也可以加上
-r Don't exit on socket receive errors. # 在遇到socket接收錯誤后,不退出測試
-s timeout Seconds to max. wait for each response # 最大超時時間,默認30s
Default is 30 seconds
-k Use HTTP KeepAlive feature # keep-alive保持連接
加上-k參數重新運行就不會有問題了
ab -c 10 -n 5000 -k http://47.104.x.x:81/
其它異常
當並發數設置為1000時,直接報錯:apr_socket_recv: Connection reset by peer (104)
[root@yoyo sbin]# ab -c 1000 -n 10000 http://47.104.x.x:81/
This is ApacheBench, Version 2.3 <$Revision: 1430300 $>
Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Licensed to The Apache Software Foundation, http://www.apache.org/
Benchmarking 47.104.190.48 (be patient)
apr_socket_recv: Connection reset by peer (104)
Total of 1 requests completed
當ab遇到嚴重的網絡錯誤后,就會退出測試,因為這種錯誤說明網絡存在其他問題,但是只要服務器返回數據,哪怕是數據不對,ab也會繼續下去,但是會記錄數據長度不對。
但事實上是:在高壓力下,偶爾的一兩個請求被阻止,這是一個正常的情況,特別是有防火牆或入侵檢測系統的情況下,這種事情會經常發生。
那么ab有沒有參數來跳過這種錯誤,使測試繼續下去呢?
-r參數可以實現忽略這種錯誤,在遇到socket接收錯誤后,不退出測試
ab -c 10 -n 5000 -r http://47.104.x.x:81/
加上-r參數就不會遇到這種異常,中途退出了
交流QQ群:779429633