ab压力测试报错(apr_socket_recv: Connection reset by peer (104)) 问题

 ab命令压力测试

        网站性能压力测试是服务器网站性能调优过程中必不可缺少的一环。只有让服务器处在高压情况下,才能真正体现出软件、硬件等各种设置不当所暴露出的问题。

        性能测试工具目前最常见的有以下几种:ab、http_load、webbench、siege。今天我们专门来介绍ab。

         ab是apache自带的压力测试工具。ab非常实用,它不仅可以对apache服务器进行网站访问压力测试,也可以对或其它类型的服务器进行压力测试。比如nginx、tomcat、IIS等。

         下面是我在做lvs实验使用ab命令测试后端服务调度压力情况:

         客户端使用ab命令请求lvs服务器端的VIP,当使用-c命令指定请求数大与一定数量后,就会有一下报错信息。

ab压力测试报错(apr_socket_recv: Connection reset by peer (104)) 问题

解决办法:

第一步:修改默认最大连接数ulimit值

[[email protected]~]# ulimit -n

1024                    #默认1024

修改方法 

[[email protected]~]# ulimit -n   20480

 第二步:修改内核参数

查看应用服务器和数据库均未报错,连接被重置,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

然后就可以超过10000个并发测试了。

另附其他系统内核参数说明:

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总数量,可根据连接数和系统资源需要进行设置。