[root@aa~]# This is ApacheBench, Version 2.3 <$Revision: 655654 $>
Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Licensed to The Apache Software Foundation, http://www.apache.org/
Benchmarking 192.168.1.176 (be patient)
Completed 300 requests
Completed 600 requests
Completed 900 requests
apr_socket_recv: Connection reset by peer (104)
Total of 1085 requests completed
查看應用服務器和數據庫均未報錯,連接被重置,bingyi了以下,apr_socket_recv這個是操作系統內核的一個參數,在高並發的情況下,內核會認為系統受到了SYN flood攻擊,會發送cookies(possible SYN flooding on port 80. Sending cookies),這樣會減慢影響請求的速度,所以在應用服務武器上設置下這個參數為0禁用系統保護就可以進行大並發測試了:
# vim /etc/sysctl.conf
net.ipv4.tcp_syncookies = 0
# sysctl -p
然后就可以超過1000個並發測試了。
另附其他系統內核參數說明:
net.ipv4.tcp_syncookies = 0
#此參數是為了防止洪水攻擊的,但對於大並發系統,要禁用此設置
net.ipv4.tcp_max_syn_backlog
#參數決定了SYN_RECV狀態隊列的數量,一般默認值為512或者1024,即超過這個數量,系統將不再接受新的TCP連接請求,一定程度上可以防止系統資源耗盡。可根據情況增加該值以接受更多的連接請求。
net.ipv4.tcp_tw_recycle
#參數決定是否加速TIME_WAIT的sockets的回收,默認為0。
net.ipv4.tcp_tw_reuse
#參數決定是否可將TIME_WAIT狀態的sockets用於新的TCP連接,默認為0。
net.ipv4.tcp_max_tw_buckets
#參數決定TIME_WAIT狀態的sockets總數量,可根據連接數和系統資源需要進行設置。
參考:
http://zhumeng8337797.blog.163.com/blog/static/100768914201262091634698/
如果還沒解決,可嘗試下面的方法
ab提供了一個參數:-r
這個參數的意思是當出現“receive error”,即接收數據錯誤時是否退出,默認是退出的,所以會出現上述的問題,加上這個標志就表示不退出了,有源碼為證,如下:
源碼路徑: {apache_root_path}/support/ab.c