PHPstudy自带的ab压力测试
ab.exe是apache自带的网站压力测试工具,能够测试网站在一定时间内的发生高并发时的反应。
使用Apache的ab.exe【以PHPstudy的Apache为例】
1.使用命令行工具,进入apache的bin文件夹
cd D:\phpStudy\PHPTutorial\Apache\bin
2.模拟并发级别为100,请求数为1000个的api数据请求数量测试
注意:若报“ab.exe: invalid URL”错误,是因为请求地址没有加上‘/’。
Server Software: nginx # 表示被测试的Web服务器软件名称
Server Hostname: textlaravel.cc # 表示请求的URL主机名
Server Port: 80 # 表示被测试的Web服务器软件的监听端口
Document Path: /goodsstart/ # 表示请求的URL中的根绝对路径,通过该文件的后缀名,我们一般可以了解该请求的类型
Document Length: 21 bytes # 表示HTTP响应数据的正文长度
Concurrency Level: 1 # 表示并发用户数,这是我们设置的参数之一
Time taken for tests: 8.743 seconds # 所有这些请求处理完成所花费的时间
Complete requests: 1 # 完成请求数
Failed requests: 0 # 失败请求数
Total transferred: 174 bytes # 网络总传输量
HTML transferred: 21 bytes # HTML内容传输量
Requests per second: 0.11 [#/sec] (mean) # 吞吐量-每秒请求数
Time per request: 8743.356 [ms] (mean) # 服务器收到请求,响应页面要花费的时间
Time per request: 8743.356 [ms] (mean, across all concurrent requests) # 并发的每个请求平均消耗时间
Transfer rate: 0.02 [Kbytes/sec] received # 平均每秒网络上的流量,可以帮助排除是否存在网络流量过大导致响应时间延长的问题
# 网络上消耗的时间的分解:
Connection Times (ms)
min mean[+/-sd] median max
Connect: 1 1 0.0 1 1
Processing: 8742 8742 0.0 8742 8742
Waiting: 8742 8742 0.0 8742 8742
Total: 8743 8743 0.0 8743 8743
结论:
一个公式可以表示:
响应时间=网络响应时间+应用程序响应时间。标准可参考国外的3/5/10原则:
(1)在3秒钟之内,页面给予用户响应并有所显示,可认为是“很不错的”;
(2)在3~5秒钟内,页面给予用户响应并有所显示,可认为是“好的”;
(3)在5~10秒钟内,页面给予用户响应并有所显示,可认为是“勉强接受的”;
(4)超过10秒就让人有点不耐烦了,用户很可能不会继续等待下去;
一个测试网站在你预估正常情况下的请求数与并发量的模拟测试,
结果如果80%的请求完成率在3秒以内,就代表访问页面的性能为优秀;
结果如果80%的请求完成率在5秒以内,就代表访问页面的性能为良好;
结果如果80%的请求完成率在10秒以内,就代表访问页面的性能为中;
结果如果80%的请求完成率在10秒以上,就代表访问页面的性能为差。
ab命令原理
Apache的ab命令模拟多线程并发请求,测试服务器负载压力,也可以测试nginx、lighthttp、IIS等其它Web服务器的压力。
Apache附带的ab工具(使用的PHP环境是WAMP集成环境,
ab工具位于D:\wamp\bin\apache\Apache2.2.21\bin)非常容易使用。
ab命令对发出负载的计算机要求很低,既不会占用很多CPU,也不会占用太多的内存,但却会给目标服务器造成巨大的负载,因此是某些DDOS攻击之必备良药,老少皆宜。
自己使用也须谨慎。否则一次上太多的负载,造成目标服务器直接因内存耗光死机,而不得不硬重启,得不偿失。
在带宽不足的情况下,最好是本机进行测试,建议使用内网的另一台或者多台服务器通过内网进行测试,这样得出的数据,准确度会高很多。远程对web服务器进行压力测试,往往效果不理想(因为网络延时过大或带宽不足)
-n发出800个请求,-c模拟800并发
键入命令:
ab -n 800 -c 800 http://192.168.0.10/
(-n发出800个请求,-c模拟800并发,相当800人同时访问,后面是测试url)
在60秒内发请求,一次100个请求
ab -t 60 -c 100 http://192.168.0.10/
在60秒内发请求,一次100个请求。