前言
ab是apache自带的,可以用它来测试网站的并发量有多大和某个页面的访问时间。
为什么要进行压测?
性能保证:压力测试可以帮助开发团队在系统上线之前发现潜在的性能问题。通过模拟大量用户同时访问系统,可以验证系统是否能够处理并发请求。
容量规划:压力测试可以提供关于系统处理能力的重要信息,帮助决策者进行容量规划。这对于确保系统能够应对未来的用户增长至关重要。
性能优化:通过分析压力测试的结果,开发团队可以识别系统中的性能瓶颈,并采取相应的优化措施,以提高系统的整体性能。
用户体验:高性能的系统意味着更好的用户体验。通过压力测试,可以确保系统在高负载下依然能够提供快速、稳定的服务,从而保持用户满意度。
常见的压测方法
负载测试:在正常工作负载下测试系统的性能,以确定系统的基准性能。
并发测试:测试系统在同时处理多个请求时的性能,以确定系统的并发处理能力。
容量测试:通过逐渐增加负载,测试系统的容量极限,以确定系统在不同负载下的性能表现。
瓶颈测试:确定系统在何种条件下性能下降,从而找出系统的瓶颈。
相关概念
- QPS
Queries Per Second 是“每秒查询率”,是一台服务器每秒能够相应的查询次数,是对一个特定的查询服务器在规定时间内所处理流量多少的衡量标准。
- TPS
是TransactionsPerSecond的缩写,也就是事务数/秒。它是软件测试结果的测量单位。一个事务是指一个客户机向服务器发送请求然后服务器做出反应的过程。客户机从发送请求时开始计时,收到服务器响应后结束,以此来计算使用的时间和完成的事务个数。
QPS基本类似于TPS,但是不同的是,对于一个页面的一次访问,形成一个TPS;但一次页面请求,可能产生多次对服务器的请求,服务器对这些请求,就可计入“QPS”之中。如,访问一个页面会请求服务器2次,一次访问,产生一个“T”,产生2个“Q”。
- RT
响应时间:执行一个请求从开始到最后收到响应数据所花费的总体时间,即从客户端发起请求到收到服务器响应结果的时间。
响应时间RT(Response-time),是一个系统最重要的指标之一,它的数值大小直接反应了系统的快慢。
- 吞吐率(Requests per second)
服务器并发处理能力的量化描述,单位是reqs/s,指的是某个并发用户数下单位时间内处理的请求数。某个并发用户数下单位时间内能处理的最大请求数,称之为最大吞吐率。
计算公式:总请求数 / 处理完成这些请求数所花费的时间,即:
Request per second = Complete requests / Time taken for tests
系统的吞吐量(承压能力)与request对CPU的消耗、外部接口、IO等等紧密关联。单个request 对CPU消耗越高,外部系统接口、IO速度越慢,系统吞吐能力越低,反之越高。
系统吞吐量几个重要参数:QPS(TPS)、并发数、响应时间。
基本用法
1.进入CMD,转到apache的bin目录下
2.执行命令ab.exe -n 访问的问次数 –c 多少人访问(并发量)
如:
ab.exe –n 10000 –c 100 http://localhost/index.ph
该命令的意思为100个人访问该地址1W次。会出现以下结果。
Server Software: Apache/2.4.4 #apache版本号
Server Hostname: localhost
Server Port: 80
Document Path: /test/index.php
Document Length: 5 bytes
ConcurrencyLevel: 100
Time taken fortests: 54.111 seconds #访问的总时间(秒)
Completerequests: 10000 #访问的总次数
Failed requests: 0
Write errors: 0
Totaltransferred: 2060000 bytes
HTMLtransferred: 50000 bytes
Requests persecond: 184.80 [#/sec] (mean) #每秒访问多少次
Time perrequest: 541.111 [ms] (mean) #这么多人(100)访问一次的时间
Time perrequest: 5.411 [ms] (mean, acrossall concurrent requests) #一个人访问一次花费的时间
Transfer rate: 37.18 [Kbytes/sec] received
结果说明:
- Document Length: 此为http响应的正文长度
- Concurrency Level: 并发请求数
- Time taken for tests: 整个测试持续的时间
- Complete requests: 完成的请求数
- Failed requests: 失败请求数
- Total transferred: 整个场景中的网络传输量
- HTML transferred: 整个场景中的HTML内容传输量
- Requests per second: 118.33 [#/sec] (mean) 吞吐率,大家最关心的指标之一,相当于 LR 中的每秒事务数,后面括号中的 mean 表示这是一个平均值
- Time per request: 422.564 [ms] (mean) 用户平均请求等待时间,大家最关心的指标之二,相当于 LR 中的平均事务响应时间,后面括号中的 mean 表示这是一个平均值
- Time per request: 8.451 [ms] (mean, across all concurrent requests) 服务器平均请求处理时间,大家最关心的指标之三
- Transfer rate: 121.45 [Kbytes/sec] received 平均每秒网络上的流量,可以帮助排除是否存在网络流量过大导致响应时间延长的问题
另外,如果我们把并发数增加到500,即把命令调整成
ab.exe -n 10000 -c 500 http://localhost/test/index.php
apr_socket_connect():由于目标计算机积极拒绝,无法连接。 (730061)
Total of 902 requestscompleted
原因是因为apache在windows下默认的最大并发访问量为150。我们可以设置conf\extra下的httpd-mpm.conf文件来修改它的最大并发数。在修改之前我们要说明一下,mpm是个什么东西?
Mpm为多路处理模块,即apache采用怎么样的方式来处理并发,主要有三种方式
1、 perfork 预处理进程方式(用进程服务)
2、 worker 工作模式(用进程下的线程服务)
3、 winnt这个一般是windos 下采用的。(针对windows)
说完这个我们就可以动手修改配置文件了。步骤如下:
1、 打开httpd.conf配置文件,打开下面的配置
# Server-poolmanagement (MPM specific)
Include conf/extra/httpd-mpm.conf
2、 确定当前 apache是mpm模式,CMD下进放到apache的bin目录输入指令httpd.exe –l 会出现以下结果,就可知道它用的是什么模式
Compiledin modules:
core.c
mod_win32.c
mpm_winnt.c 这是为winnt模式
http_core.c
mod_so.c
3、 修改httpd-mpm.conf文件,因为从上面可以看到,我的apache用的是winnt模式,所以在该文件下找到对应的winnt_module模块,修改参数,原先为150,我们把它修改成1000
<IfModulempm_winnt_module>
ThreadsPerChild 1000
MaxConnectionsPerChild 0
</IfModule>
4、 重启服务器
修改完之后我们重新运行上面的命令: ab.exe-n 10000 -c 500 http://localhost/test/index.php
它就会运行成功了,出现与ab.exe -n10000 -c 100 http://localhost/test/index.php时类似的效果。
同理,如果是其它模式,则在httpd-mpm.conf中修改对应的地方即可。如下
<IfModule mpm_prefork_module>
StartServers 5 #开始启动的进程
MinSpareServers 5 #最小准备进程
MaxSpareServers 10 #最大空闲进程
MaxRequestWorkers 1000 #最大并发数
MaxConnectionsPerChild 0
</IfModule>
传参
传递一个Cookie值,如需要登陆后调用的。 -大写C
ab -n 100 -C key=value http://localhost.com/test/index.php
传递多个Cookie,之间设置header
ab -n 100 -H “Cookie: Key1=Value1; Key2=Value2” http://localhost.com/test/index.php
总结
以上就是今天要讲的内容,本文仅仅简单介绍了ab的使用。