ab 压力测试

1、ab的安装

安装apache的工具包httpd-tools,命令:

1

yum -y install httpd-tools

ab 压力测试_第1张图片

 安装完后,查看版本号或检查是否已安装,命令:ab -V

1

ab -V

2、实际使用

接下来我们使用ab命令来进行对服务器的请求测试,ab的命令参数比较多,我们经常使用的参数是-n和-c参数。

现在我们假设有5000个请求(-n),并发量为100(-c),访问地址:http://www.hjl.com/demo/index.html;(目前我搭了一个Nginx服务器,用4台Tomcat做负载均衡,配置就不展示出来,主要以ab的使用为主);

使用命令:

1

ab -n 5000 -c 100 http://www.hjl.com/demo/index.html
# 上面这行命令表示 总共5000个请求,每次请求会有100个请求并发量,对服务地址:http://www.hjl.com/demo/index.html,进行访问

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@hejl nginx]# ab -n 5000 -c 100 http://www.hjl.com/demo/index.html

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

Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/

Licensed to The Apache Software Foundation, http://www.apache.org/

Benchmarking www.hjl.com (be patient)

Completed 500 requests

Completed 1000 requests

Completed 1500 requests

Completed 2000 requests

Completed 2500 requests

Completed 3000 requests

Completed 3500 requests

Completed 4000 requests

Completed 4500 requests

Completed 5000 requests

Finished 5000 requests

Server Software:        nginx/1.19.4

Server Hostname:        www.hjl.com

Server Port:            80

Document Path:          /demo/index.html

Document Length:        112 bytes

Concurrency Level:      100

Time taken for tests:   9.900 seconds

Complete requests:      5000

Failed requests:        1250

   (Connect: 0, Receive: 0, Length: 1250, Exceptions: 0)

Write errors:           0

Total transferred:      1747500 bytes

HTML transferred:       557500 bytes

Requests per second:    505.06 [#/sec] (mean)

Time per request:       197.997 [ms] (mean)

Time per request:       1.980 [ms] (mean, across all concurrent requests)

Transfer rate:          172.38 [Kbytes/sec] received

Connection Times (ms)

              min  mean[+/-sd] median   max

Connect:        2   51 237.9      2    3010

Processing:     2   75 424.7      4    6348

Waiting:        2   75 424.6      4    6348

Total:          4  126 504.0      6    6390

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

  50%      6

  66%     19

  75%     41

  80%     42

  90%    209

  95%   1007

  98%   1213

  99%   2746

 100%   6390 (longest request)

 注:(URL的地址要改为自己的服务地址)

ab测试结果出来了,通过上面的代码我们一目了然,ab测试出的吞吐量为:Requests per second:    505.06 [#/sec] (mean)。(吞吐量越高,代表服务器性能越好)

除此之外还有其他信息,需说明如下:

Server Software:表示被测试的Web服务器软件名称。

Server Hostname:表示请求的URL主机名。

Server Port:表示被测试的Web服务器软件的监听端口。

Document Path:表示请求的URL中的根绝对路径,通过该文件的后缀名,我们一般可以了解该请求的类型。

Document Length:表示HTTP响应数据的正文长度。

Concurrency Level:表示并发用户数,这是我们设置的参数之一。

Time taken for tests:表示所有这些请求被处理完成所花费的总时间。

Complete requests:表示总请求数量,这是我们设置的参数之一。

Failed requests:表示失败的请求数量,这里的失败是指请求在连接服务器、发送数据等环节发生异常,以及无响应后超时的情况。如果接收到的HTTP响应数据的头信息中含有2XX以外的状态码,则会在测试结果中显示另一个名为“Non-2xx responses”的统计项,用于统计这部分请求数,这些请求并不算在失败的请求中。

Total transferred:表示所有请求的响应数据长度总和,包括每个HTTP响应数据的头信息和正文数据的长度。注意这里不包括HTTP请求数据的长度,仅仅为web服务器流向用户PC的应用层数据总长度。

HTML transferred:表示所有请求的响应数据中正文数据的总和,也就是减去了Total transferred中HTTP响应数据中的头信息的长度。

Requests per second:吞吐率,计算公式:Complete requests/Time taken for tests

Time per request:用户平均请求等待时间,计算公式:Time token for tests/(Complete requests/Concurrency Level)。

Time per requet(across all concurrent request):服务器平均请求等待时间,计算公式:Time taken for tests/Complete requests,正好是吞吐率的倒数。也可以这么统计:Time per request/Concurrency Level。

Transfer rate:表示这些请求在单位时间内从服务器获取的数据长度,计算公式:Total trnasferred/ Time taken for tests,这个统计很好的说明服务器的处理能力达到极限时,其出口宽带的需求量。

Percentage of requests served within a certain time(ms):这部分数据用于描述每个请求处理时间的分布情况,比如以上测试,80%的请求处理时间都不超过6ms,这个处理时间是指前面的Time per request,即对于单个用户而言,平均每个请求的处理时间。

3、疑难杂症解决

一:

压测提示:Too many open files

解决方式:

(1) 查看当前打开文件数限制 ulimit -a 

 (2)修改 open files 数量 :ulimit -n 8192然后查看 ulimit -a

4、参数化请求:

先简单介绍一下被测试的系统的情况:

1)首先需要测试登录的接口,涉及post请求和json传参;

2)接着测试需要登录后实现的功能的接口,涉及post请求、json传参以及表单中使用到的cookie-session。

(被测试的系统使用express的中间件cookie-session进行会话管理,因此在传参时会以req.session.xxx的形式传递某些参数)

接下来是测试登录接口:

1)在任意文件夹中新建一个txt文件,此处我命名为userLogin.txt。文件内容如下:

注意除了type为number的不需要加引号,其它都需要加引号。

{"capitalaccountid": 1000001,"cashpassWord": "19770422"}
2)以管理员身份运行cmd,进入Apache安装位置的bin文件夹下。

3)运行以下指令:

ab -n 10000 -T application/json -p D:\Apache24\my-files\userLogin.txt "http://localhost:3000/userLogin/capitalUsersLogin"
ab:使用Apache自带的ab压测工具;

-n 10000:请求数为10000;

-T application/json:采用json传参的方式;

-p D:\xxx.txt:POST时的数据文件,此处为1)中创建的参数文件;

最后为需要压测的接口路径。
 

你可能感兴趣的:(性能测试,ab测试,压力测试)