压力测试工具 - 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

 

posted @ 2018-08-31 17:08  小寒1206  阅读(234)  评论(0编辑  收藏  举报