压力测试工具 - ab
安装ab:
yum -y install httpd-tools
测试:—— [http[s]://]hostname[:port]/path
ab -n 200 -c 20 -k http://xxx.besun..y.com/ //这个可以使用IP地址,也可以指定端口,-k解决超时问题
结果分析:
结果解释:
Document Path: / => 供测试的url路径
Document Length: 2606 bytes => 返回的文档大小
Concurrency Level: 20 => 并发连接数
Time taken for tests: 8.808 seconds => 总的消耗时间
Complete requests: 200 => 压测的总次数
Failed requests: 0 => 失败的请求数
Write errors: 0 => 网络连接写入错误数
Total transferred: 717240 bytes => 传输总数据量
HTML transferred: 521200 bytes => html文档总数据量
Requests per second: 22.71 [#/sec] (mean) => 吞吐率,最关系的指标之一。即平均每秒可以处理的请求个数为22.7个。表示当前机器的性能。
Time per request: 880.776 [ms] (mean) => 用户平均请求等待时间,最关心的指标之二。本例中相当于处理20个并发请求平均花费880.776ms
Time per request: 44.039 [ms] (mean, across all concurrent requests) => 服务器平均请求等待时间,最关心的指标之三,吞吐率的倒数。相当于一个请求需要的平均时间为44.039ms
Transfer rate: 79.52 [Kbytes/sec] received => 数据传输速度,表示这些请求在单位时间内从服务器获取的数据长度,计算公式:Total trnasferred/ Time taken for tests,这个统计很好的说明服务器的处理能力达到极限时,其出口宽带的需求量。
Connection Times (ms) => 每个请求的时间情况,包含连接数,进程数,等待数,总计。可以看到最小值、平均值、中位数、最大数。
Percentage of the requests served within a certain time (ms) => 时间的分布情况,50%在210ms内返回,90%的请求在1.633s内返回。最长的一个请求在6563(即6.563秒)才返回,即用户等待了6.563秒。
—————— 解决并发连接数超出的问题 ————
错误:当连接数设置为500的时候提示:
socket: Too many open files (24)
使用命令查看并发连接数:
// 使用命令查看打开文件数限制 ulimit -n 或者 ulimit -a // 发现是256,可以调整打开文件数为10W: ulimit -n 100000 // 再次查看: ulimit -a //已经变成了204800了。
——发现问题,仍然报一样的错。是因为这个命令执行的是当前用户设置的最大数量,即root,但是执行访问的其实是www用户
————请注意,以上命令只是暂时修改了,重启后还是会还原。永久修改可以参考:
//直接写入修改的数量 echo "* soft nofile 100000" >>/etc/security/limits.conf echo "* hard nofile 100000" >>/etc/security/limits.conf //或者 vim /etc/security/limits.conf * soft nofile 100000 * hard nofile 100000 //*表示任何都可以打开的文件数
查看文件打开数量:
lsof | wc -l
———— 防洪水攻击 ————
错误:apr_socket_recv: Connection reset by peer (54)
原因阐述:apr_socket_recv这个是操作系统内核的一个参数,在高并发的情况下,内核会认为系统受到了SYN flood攻击,会发送cookies(possible SYN flooding on port 80. Sending cookies),这样会减慢影响请求的速度,所以在应用服务武器上设置下这个参数为0禁用系统保护就可以进行大并发测试了:
// 登录服务器,打开sysctl文件 vim /etc/sysctl.conf // 配置以下参数 net.ipv4.tcp_syncookies = 0 // 重新加载内核参数 sysctl -p