Linux ab命令详解

Linux ab命令详解教程

Linux 中的 ab 命令是 apache 自带的压力测试工具。ab 是 apachebench 命令的缩写。

Linux ab命令原理

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

ab 命令对发出负载的计算机要求很低,它既不会占用很高 CPU,也不会占用很多内存。但却会给目标服务器造成巨大的负载,其原理类似 CC 攻击。自己测试使用也需要注意,否则一次上太多的负载。可能造成目标服务器资源耗完,严重时甚至导致死机。

Linux ab命令安装

我们使用如下命令,安装 ab 工具,具体命令如下:

yum –y install httpd-tools

下载安装完成后,可输入 ab –V 命令来验证是否安装成功,具体命令如下:

ab –V

执行完毕后,如下图所示:

45_Linux ab命令详解.png

具体使用参数说明,可输入 ab –help 查看,具体命令如下:

ab –help

执行完毕后,如下图所示:

46_Linux ab命令详解.png

Linux ab命令使用

语法

ab [options]

参数

选项 功能
options 为命令行选项。

ab命令常用参数

选项 描述
-n 在测试会话中,所执行的请求个数,默认时,仅执行一个;表示请求的总数量。
-c 一次产生的请求个数,默认一次一个;表示请求的用户量。
-t 指定每个请求的超时时间,默认是 30 秒。

ab命令所有参数

选项 描述
-p 包含了需要 POST 的数据的文件。
-P 对一个中转代理提供 BASIC 认证信任。用户名和密码由一个 : 隔开,并以 base64 编码形式发送。无论服务器是否需要(即, 是否发送了 401 认证需求代码),此字符串都会被发送。
-T POST 数据所使用的 Content-type 头信息。
-v 设置显示信息的详细程度 -4 或更大值会显示头信息,3 或更大值可以显示响应代码(404,200等),2 或更大值可以显示警告和其他信息。
-V 显示版本号并退出。
-w 以 HTML 表的格式输出结果。默认时,它是白色背景的两列宽度的一张表。
-i 执行 HEAD 请求,而不是 GET。
-x 设置 <table> 属性的字符串。
-X 对请求使用代理服务器。
-y 设置 <tr> 属性的字符串。
-z 设置 <td> 属性的字符串。
-C 对请求附加一个 Cookie: 行。其典型形式是 name=value 的一个参数对,此参数可以重复。
-H 对请求附加额外的头信息。此参数的典型形式是一个有效的头信息行,其中包含了以冒号分隔的字段和值的对(如,“Accept-Encoding:zip/zop;8bit”)。
-A 对服务器提供 BASIC 认证信任。用户名和密码由一个:隔开,并以 base64 编码形式发送。无论服务器是否需要(即,是否发送了 401 认证需求代码),此字符串都会被发送。
-h 显示使用方法。
-d 不显示 “percentage served within XX [ms] table” 的消息(为以前的版本提供支持)。
-e 产生一个以逗号分隔的(CSV)文件,其中包含了处理每个相应百分比的请求所需要(从 1% 到 100%)的相应百分比的(以微妙为单位)时间。由于这种格式已经 “二进制化”,所以比 ‘gnuplot’ 格式更有用。
-g 把所有测试结果写入一个 ‘gnuplot’ 或者 TSV(以 Tab 分隔的)文件。此文件可以方便地导入到Gnuplot,IDL,Mathematica,Igor 甚至 Excel 中。其中的第一行为标题。
-k 启用 HTTP KeepAlive 功能,即在一个 HTTP 会话中执行多个请求。默认时,不启用 KeepAlive 功能。
-q 如果处理的请求数大于 150,ab 每处理大约 10% 或者 100 个请求时,会在 stderr 输出一个进度计数。此 -q 标记可以抑制这些信息。

ab命令输出字段

字段 描述
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 吞吐率,也叫 QPS,计算公式: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% 的请求处理时间都不超过 2ms,这个处理时间是指前面的 Time per request,即对于单个用户而言,平均每个请求的处理时间。
这个表第一行表示有 50% 的请求都是在 2ms 内完成的,可以看到这个值是比较接近平均系统响应时间,以此类推。
Connection Times (ms) 这几行组成的表格主要是针对响应时间也就是第一个 Time per request 进行细分和统计。一个请求的响应时间可以分成网络链接(Connect),系统处理(Processing)和等待(Waiting)三个部分。表中 min 表示最小值; mean 表示平均值;[+/-sd]表示标准差(Standard Deviation) ,也称均方差(mean square error),这个概念在中学的数学课上学过,表示数据的离散程度,数值越大表示数据越分散,系统响应时间越不稳定。 median 表示中位数; max 当然就是表示最大值了。
需要注意的是表中的 Total 并不等于前三行数据相加,因为前三行的数据并不是在同一个请求中采集到的,可能某个请求的网络延迟最短,但是系统处理时间又是最长的呢。所以Total 是从整个请求所需要的时间的角度来统计的。这里可以看到最慢的一个请求花费了2ms(即 100% 2 (longest request))。

ab命令压力测试

语法

ab -n1000 -c100 https://www.haicoder.net/

案例

我们使用 ab 命令,测试共 1000 次请求,并发数为 100,具体命令如下:

ab -n1000 -c100 https://www.haicoder.net/

运行后,终端输出如下:

47_Linux ab命令详解.png

我们看到,我们使用了 ab 命令测试了服务器的性能。

Linux ab命令详解总结

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