Apache压力测试方法之ab命令

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Apache压力测试方法之ab命令相关的知识,希望对你有一定的参考价值。

Apache压力测试方法之ab命令

1、性能测试工具ab简介

ab(Apache Bench)命令是apache免费自带的性能测试工具,默认在apache的bin目录下,它能模拟多个并发请求,主要是用来测试apache、nginx等网站服务器单位时间内能处理请求的个数。

ab命令会创建多个并发访问线程,模拟多个访问者同时对某一个URL地址进行访问。它的测试目标是基于URL的,因此,它既可以用来测试apache的负载压力,也可以测试nginx、lighthttp、tomcat、IIS等其它Web服务器的压力。

ab命令对发出负载的计算机要求很低,既不会占用很多CPU,也不会占用太多的内存,但却会给目标服务器造成巨大的负载,其原理类似CC攻击。自己使用也须谨慎。否则一次上太多的负载,造成目标服务器直接因内存耗光死机,而不得不硬重启,得不偿失。

在带宽不足的情况下,最好是本机进行测试,建议使用内网的另一台或者多台服务器通过内网进行测试,这样得出的数据,准确度会高很多。远程对web服务器进行压力测试,往往效果不理想(因为网络延时过大或带宽不足)

 

2、安装ab命令

默认情况下,只要安装了Apache,ab命令就会自动安装上,当然有时候我们只想单独安装ab命令,那么就需要使用下面的方法。

 

方法1:直接使用yum安装apache的工具包httpd-tools安装ab命令

[[email protected] ~]# yum -y install httpd-tools

[[email protected] ~]# ab -V   检查ab命令是否安装成功

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/

 

方法2:yum安装或编译安装Apache即可安装ab命令(这里不进行演示)

源码安装apache的话。apache安装完毕后ab命令存放在apache安装目录的bin目录下,例如:/usr/local/apache2/bin

如果apache 是通过yum的RPM包方式安装的话,ab命令默认存放在/usr/bin目录下。

3ab命令重要常用参数说明

-c 数值

单次发送的请求数量,也称并发量

-n 数值

总共的请求次数

-t 数值(秒)

设置请求的时间长短,单位默认秒,其内部隐含值是-n 50000

-v

设置详细模式等级

-V

显示版本号并退出

-h

显示帮助信息

-H

为请求追加一个额外的头

-A

指定连接服务器的基本的认证凭据

-C

添加cookie

-g

将测试结果输出为“gnuolot”文件

-i

使用“head”请求方式

-k

激活HTTP中的“keepAlive”特性

-p

指定包含数据的文件

-q

不显示进度百分比

-T

使用POST数据时,设置内容类型头

-w

html表格方式打印结果

-x

以表格方式输出时,设置表格的属性

-X

使用指定的代理服务器发送请求

-y

以表格方式输出时,设置表格属性

 

4、使用ab命令进行压力测试   

[[email protected] ~]# ab -c 30 -n 100 http://192.168.115.120/

#说明:指定的并发量为30每秒,总共请求100次

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 192.168.115.120 (be patient).....done

 

 

Server Software:        Apache/2.4.7   被测试的Web服务器软件名称

Server Hostname:        192.168.115.120   请求的URL主机名

Server Port:            80         请求端口号

 

Document Path:          /        请求的URL文件路径

Document Length:        152 bytes   页面字节数

 

Concurrency Level:      30       并发用户数

Time taken for tests:   0.085 seconds  总访问时间

Complete requests:      100      完成的请求数

Failed requests:        0        失败请求数

Write errors:           0

Total transferred:      39600 bytes  请求总数据大小(包括header头信息)

HTML transferred:       15200 bytes   html页面实际总字节数

Requests per second:    1170.93 [#/sec] (mean)    吞吐量-每秒请求数

Time per request:       25.621 [ms] (mean)      用户平均请求等待时间

Time per request:       0.854 [ms] (mean, across all concurrent requests)    并发的每个请求平均消耗时间

Transfer rate:          452.82 [Kbytes/sec] received  每秒获取的数据长度

Connection Times (ms)

              min  mean[+/-sd] median   max

Connect:        0    3   3.8      1      10

Processing:     8   18   5.5     16      30

Waiting:        0   17   5.7     16      29

Total:         12   21   7.3     18      37

 

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

  50%     18     50%用户请求在18ms内返回

  66%     23     66%用户请求在23ms内返回

  75%     27     75%用户请求在27ms内返回

  80%     29     80%用户请求在29ms内返回

  90%     33     90%用户请求在33ms内返回

  95%     35     95%用户请求在35ms内返回

  98%     36     98%用户请求在36ms内返回

  99%     37     99%用户请求在37ms内返回

 100%     37 (longest request)

 

由于对于并发请求,cpu实际上并不是同时处理的,而是按照每个请求获得的时间片逐个轮转处理的,所以基本上第一个Time per request时间约等于第二个Time per request时间乘以并发请求数

5、关于需要用户名密码登录的问题

有时候进行压力测试需要用户登录,可以先用账户和密码登录后,用开发者工具找到标识这个会话的Cookie值(Session ID)记下来.

 

如果只用到一个Cookie,那么只需键入命令:

ab -n 100 -C key=value http://test.com/

 

如果需要多个Cookie,就直接设Header:

ab -n 100 -H “Cookie: Key1=Value1; Key2=Value2” http://test.com/

总的来说ab工具ab小巧简单,上手学习较快,可以提供需要的基本性能指标,但是没有图形化结果,不能监控。因此ab工具可以用作临时紧急任务和简单测试。同类型的压力测试工具还有:webbench、siege、http_load等

 

6ab命令使用的一些问题

ab命令在一般系统上面做测试时候,一般并发不能超过1024个,其实是因为系统限制每个进程打开的最大文件数为1024,可以用ulimit -a来查看

 

-n 可以指定最大请求数,但是不能超过50000个

 

-v n 当n>=2 时,可以显示发送的http请求头,和响应的http头及内容,压力测试时不要这么做。在做压力测试的时候,一般情况下压力测试客户端接收到的数据量一定会远大于发送出去的数据量

7ab命令的性能指标

1)吞吐率(Requests per second

概念:服务器并发处理能力的量化描述,单位是reqs/s,指的是某个并发用户数下单位时间内处理的请求数。某个并发用户数下单位时间内能处理的最大请求数,称之为最大吞吐率。计算公式:总请求数 / 处理完成这些请求数所花费的时间,即Request per second = Complete requests / Time taken for tests

 

2)并发连接数(The number of concurrent connections

概念:某个时刻服务器所接受的请求数目,简单的讲,就是一个会话。

 

3)并发用户数(The number of concurrent usersConcurrency Level

概念:要注意区分这个概念和并发连接数之间的区别,一个用户可能同时会产生多个会话,也即连接数。

 

4)用户平均请求等待时间(Time per request

计算公式:处理完成所有请求数所花费的时间/ (总请求数 / 并发用户数),即

Time per request = Time taken for tests /( Complete requests / Concurrency Level)

 

5)服务器平均请求等待时间(Time per request: across all concurrent requests

计算公式:处理完成所有请求数所花费的时间 / 总请求数,即

Time taken for / testsComplete requests

可以看到,它是吞吐率的倒数。同时,它也=用户平均请求等待时间/并发用户数,即Time per request / Concurrency Level


以上是关于Apache压力测试方法之ab命令的主要内容,如果未能解决你的问题,请参考以下文章

如何使用apache自带的ab做压力测试

转:Web性能压力测试工具之ApacheBench(ab)详解

Linux之ab命令

apache-ab并发负载压力测试

apache-ab并发负载压力测试

如何使用,判断Apache AB压力测试