压力测试工具:apache bench(ab)
阅读原文时间:2023年07月13日阅读:1

作为php后端工程师,除了实现业务需求之外,需要考虑的就是自己写的服务,在大并发下是否能正常运行了,例如在我之前文章讲到的,在并发下,数据库查询可能会造成脏读幻读等情况,导致业务不正常.

但是,在一般开发情况下,没那么多大并发情况让你测试,那该怎么办呢?

这时候,我们就可以用到apache的压力测试工具了,apache bench简称ab

安装

1

2

3

yum -y install httpd-tools //centos

apt-get install apache2-utils //ubuntu

ab -V #查看版本

windows只需要安装apache,就自带ab工具

简单使用

通过命令:

1

ab -c1000 -n100000 http:``//127``.0.0.1/

可向目标地址发送 100000次请求,并发数为1000

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

[root@localhost ~]``# ab -c100 -n10000 http://127.0.0.1:9501/

This&nbsp;is&nbsp;ApacheBench,&nbsp;Version&nbsp;2.3&nbsp;<$Revision:&nbsp;1430300&nbsp;$>

Copyright&nbsp;1996&nbsp;Adam&nbsp;Twiss,&nbsp;Zeus&nbsp;Technology&nbsp;Ltd,&nbsp;http:``//www``.zeustech.net/

Licensed&nbsp;to&nbsp;The&nbsp;Apache&nbsp;Software&nbsp;Foundation,&nbsp;http:``//www``.apache.org/

Benchmarking&nbsp;127.0.0.1&nbsp;(be&nbsp;patient)

Completed&nbsp;1000&nbsp;requests //``已经完成的请求数

Completed&nbsp;2000&nbsp;requests

Completed&nbsp;3000&nbsp;requests

Completed&nbsp;4000&nbsp;requests

Completed&nbsp;5000&nbsp;requests

Completed&nbsp;6000&nbsp;requests

Completed&nbsp;7000&nbsp;requests

Completed&nbsp;8000&nbsp;requests

Completed&nbsp;9000&nbsp;requests

Completed&nbsp;10000&nbsp;requests

Finished&nbsp;10000&nbsp;requests

Server&nbsp;Software:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;EasySwoole #服务器名

Server&nbsp;Hostname:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;127.0.0.1 #请求的URL主机名

Server&nbsp;Port:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;9501 #端口号

Document&nbsp;Path:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/ #请求路径

Document&nbsp;Length:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;44&nbsp;bytes #响应数据长度

Concurrency&nbsp;Level:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;100 #并发数,我们自己设置的-c参数

Time&nbsp;taken for tests:&nbsp;&nbsp;&nbsp;0.629&nbsp;seconds #请求完成时间

Complete&nbsp;requests:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;10000 #完成请求数

Failed&nbsp;requests:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0 #错误请求数

Write&nbsp;errors:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0 #写入错误次数

Total&nbsp;transferred:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;2050000&nbsp;bytes #请求长度总和

HTML&nbsp;transferred:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;440000&nbsp;bytes #html响应总长度(去除了响应头的长度)

Requests&nbsp;per&nbsp;second:&nbsp;&nbsp;&nbsp;&nbsp;15909.13&nbsp;[``#/sec]&nbsp;(mean)&nbsp;#每秒处理的请求数

Time&nbsp;per&nbsp;request:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;6.286&nbsp;[ms]&nbsp;(mean) #用户平均请求等待时间

Time&nbsp;per&nbsp;request:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0.063&nbsp;[ms]&nbsp;(mean,&nbsp;across&nbsp;all&nbsp;concurrent&nbsp;requests) #服务器平均处理时间

Transfer&nbsp;rate:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;3184.93&nbsp;[Kbytes``/sec``]&nbsp;received #带宽传输速度

Connection&nbsp;Times&nbsp;(ms) #连接处理时间

min&nbsp;&nbsp;mean[+``/-sd``]&nbsp;median&nbsp;&nbsp;&nbsp;max

Connect:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;1&nbsp;&nbsp;&nbsp;1.3&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;51

Processing:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;5&nbsp;&nbsp;&nbsp;5.6&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;4&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;56

Waiting:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;4&nbsp;&nbsp;&nbsp;5.5&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;3&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;55

Total:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;6&nbsp;&nbsp;&nbsp;5.8&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;5&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;57

Percentage&nbsp;of&nbsp;the&nbsp;requests&nbsp;served&nbsp;within&nbsp;a&nbsp;certain time (ms)

50%&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;5 #50%的请求在5ms内返回

66%&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;6

75%&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;6

80%&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;7

90%&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;8

95%&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;10

98%&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;24

99%&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;36 #99%的请求在36ms内返回

100%&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;57&nbsp;(longest&nbsp;request)

[root@localhost&nbsp;~]``#

通过ab命令测试,将会输出以上的数据,通过上面的数据可分析出服务器响应情况,并发处理能力,尤其是Requests per second 参数,它确定了服务器的秒并发能力

ab常用参数配置

1

ab&nbsp;[-命令命令参数]&nbsp;请求地址

最后的请求地址不能直接为单域名(http://www.php20.cn) 必须再增加一个/ http://www.php20.cn/

-n10000 代表本次测试发起10000个请求

-c1000 代表每次都同时发起1000次请求,也就是并发数为1000

-t2 代表2秒后就结束测试

-s30 代表每个请求如果超时30秒,则直接代表该请求超时

例如:

新增文件post.txt:

1

name=tioncico&password=123456

请求:

1

ab&nbsp;-c100&nbsp;-n10000&nbsp;-p&nbsp;post.txt&nbsp;-T "application/x-www-form-urlencoded"  http:``//127``.0.0.1:9501/

默认值为1,只显示请求的总统计

2 显示响应头,响应数据,并包含1的显示

3 显示响应状态码,并包含2的显示

4 (本人没发现和3有啥区别,听说会显示更多信息)

-C "cookie1=cookie1,cookie2=cookie2"

其他

通过上面的一些参数配置,我们可以通过设置cookie,去模拟用户登录情况,用于测试用户登录后的并发压力测试

也可以通过-p配置,去上传post数据,用于测试表单提交等压力测试

总的来说,ab压力测试工具只能简单测试一些请求接口,但是并不能实现复杂的测试条件判断,例如post数据异常,ab测试工具是不能够判断数据是否异常的

本文为仙士可原创文章,转载无需和我联系,但请注明来自仙士可博客www.php20.cn