今天用apache 自带的ab工具测试,当并发量达到1000多的时候报错以下:html
[root@aa~]# This is ApacheBench, Version 2.3 <$Revision: 655654 $>数据库
Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/apache
Licensed to The Apache Software Foundation, http://www.apache.org/vim
Benchmarking 192.168.1.176 (be patient)服务器
Completed 300 requestscookie
Completed 600 requests并发
Completed 900 requestssocket
apr_socket_recv: Connection reset by peer (104)tcp
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/