压测和防止压测方案

压测、防止压测方案

1. 压测

(1) 压测工具:ab

(2) 压测请求方式:get

(3) 压测域名:url

(4) 压测方案:10万请求,500并发

(5) 压测脚本

ab -n 100000 -c 500 url

(6) 展示压测结果

 

从上面分析,10万请求错误有96881次请求错误,基本上也就是很大的问题了

 

(7) Nginx访问日志监控http返回状态

 

进一步分析:很明显,日志记录瞬间很多请求,有好多http 都是503服务器错误,这些是压测并发的请求,有一些是200,这些是正常请求的,访问是OK的。

 

 

(8) Top监控进程状态

① 压测前:

 

 

② 压测中:

 

 

 

 

(9) 解决方案

通过第八点分析:很明显,php-fpm进程数,瞬间增加到6个子进程,nginx增加到3个子进程,并且Nginx占用的CPU43.740.020.5;并且ab进程也占了80.4,也就是10万请求,500并发的情况下,在这个机器上面,CPU超负荷了,很显然CPU是跟不上的,需要提升,当然可以根据具体情况应对具体的措施。

 

 

2.  通过第一大点,可以看出压测对服务器是很可怕的,我们在压测的同时,还需要做到,预防第三方的恶意压测,这里有

(1) 

net.ipv4.tcp_syncookies = 0   vim /etc/sysctl.conf 这里面可以看到)

这个是操作系统内核的一个参数,在高并发的情况下,内核会认为系统受到了SYN flood攻击,会发送cookiespossible SYN flooding on port 80. Sending cookies),这样会减慢影响请求的速度,所以在应用服务武器上设置下这个参数为0禁用系统保护就可以进行大并发测试了,如果设置为1,那么就会出现apr_socket_recv: Connection reset by peer (104),不让并发通过

 

net.ipv4.tcp_syncookies = 0 的时候,全部请求通过

 

 

net.ipv4.tcp_syncookies = 1 的时候,请求挡掉了

 

 

由此可见,这个可以预防恶意压测

 

(2) 

limit_conn_zone等相关配置

limit_conn为限制并发连接数;

limit_rate为限制下载速度;

 

HTTP中配置

limit_conn_zone $binary_remote_addr zone=perip:10m;

Server中配置

limit_conn perip 10;

 limit_rate_after 1m;

limit_rate 100k;

配置之前如下:

 

配置后如下:

 

 

很明显CPU利用率没有那么高了,以上是两种预压测的方案,当然还有其他的方案,不一一举例

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值