行业资讯

帮助中心 >  产品文档 >  云计算 >  Linux小技巧-使用ab命令做性能压测

在进行服务器性能优化或排查问题时,压力测试是不可或缺的工具之一。Apache Bench(简称ab)作为一款轻量级的压测工具,不仅可以帮助开发者和运维人员快速了解服务器在高并发情况下的表现,还能够揭示可能存在的网络瓶颈。本篇文章将介绍ab命令的基本功能和使用方法,帮助大家在日常的工作中有效应用该工具进行简单的压测。

1 背景

有时需要在集群内简单地发起压测,以排除网络问题,这时可以使用 ab 命令。

ab 命令全称为 Apache bench 是Apache自带的压力测试工具。ab 命令非常实用,它不仅可以对 Apache 服务器进行网站访问压力测试,也可以对或其它类型的服务器进行压力测试,ab 命令会创建多个并发线程,模拟多个访问者同时对某一个url地址进行访问,实现压力测试。

ab 命令对发出负载的计算机要求很低,它既不会占用很高 CPU,也不会占用很多内存。但却会给目标服务器造成巨大的负载,其原理类似CC攻击,可能会造成目标服务器资源耗尽,严重时可能会导致死机,而且它没有图形化结果不能监控,所以只能用作临时紧急任务和简单的测试。

2 ab 安装

yum install -y httpd-tools


命令执行完成后,就可以直接运行ab。


3 ab 使用方法

常用使用方法:

ab -t 120 -n 1000 -c 20 -i
#-t:测试所进行的最大秒数。其内部隐含值是-n 50000,它可以使对服务器的测试限制在一个固定的总时间以内。默认时,没有时间限制。
#-n:在测试会话中所执行的请求个数。默认时,仅执行一个请求。
#-c:并发量,一次产生的请求个数。默认是一次一个。
#-i:执行HEAD请求,而不是GET。


完整参数说明:

-n:在测试会话中所执行的请求个数。默认时,仅执行一个请求。

-c:一次产生的请求个数。默认是一次一个。

-t:测试所进行的最大秒数。其内部隐含值是-n 50000,它可以使对服务器的测试限制在一个固定的总时间以内。默认时,没有时间限制。 

-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中。其中的第一行为标题。

-i:执行HEAD请求,而不是GET。

-k:启用HTTP KeepAlive功能,即在一个HTTP会话中执行多个请求。默认时,不启用KeepAlive功能。

-q:如果处理的请求数大于150,ab每处理大约10%或者100个请求时,会在stderr输出一个进度计数。此-q标记可以抑制这些信息。

4 ab 结果说明

4.1 压测指标

在进行性能测试过程中有几个指标比较重要:

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

并发连接数(The number of concurrent connections) 概念:某个时刻服务器所接受的请求数目,简单的讲,就是一个会话。

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

用户平均请求等待时间(Time per request) 计算公式:处理完成所有请求数所花费的时间/总请求数,即 Time per request=Time taken for tests/(Complete requests/Concurrency Level)。

服务器平均请求等待时间(Time per request: across all concurrent requests) 计算公式:处理完成所有请求数所花费的时间 / 总请求数,即 Time taken for / testsComplete requests 可以看到,它是吞吐率的倒数。同时,它也=用户平均请求等待时间/并发用户数,即 Time per request / Concurrency Level。


4.2 网络性能指标

image.png


由以下时间点来算出时间指标:

t1: Start of connection
这是连接开始的时间点,标志着尝试建立连接的过程的开始。

t2: Connected, start writing
这个时间点标志着连接已经建立,并且开始发送(写入)请求数据。

t3: Request written
这个时间点指的是请求数据已经完全写入(发送完毕)的时间。

t4: First byte of input
这个时间点是接收到输入的第一个字节的时间,即开始接收响应数据的时间。

t5: Connection closed
这个时间点是连接关闭的时间,标志着整个请求-响应过程的结束。


时间指标定义:

Connect:
定义为从开始连接(t1)到连接成功并开始写入请求(t2)的时间差。这通常代表了网络延迟。

Processing:
定义为从连接成功并开始写入请求(t2)到连接关闭(t5)的时间差。这是接收完整响应所需的时间,即从连接打开后开始计算直到连接关闭。

Waiting:
定义为从请求写入完成(t3)到接收输入的第一个字节(t4)的时间差。这代表了发送请求后等待第一个字节的时间(Waiting <= Processing)。

Total:
定义为从开始连接(t1)到连接关闭(t5)的总时间。这是整个请求处理过程的总耗时(Connect + Processing)。



5 返回结果说明

image.png

 
 7.Benchmarking 192.168.176.30 (be patient) #完成的进度
 8.Completed 100 requests
 9.Completed 200 requests
 10.Completed 300 requests
 11.Completed 400 requests
 12.Completed 500 requests
 13.Completed 600 requests
 14.Completed 700 requests
 15.Completed 800 requests
 16.Completed 900 requests
 17.Completed 1000 requests
 18.Finished 1000 requests 
 19.
 20.Server Software:        Apache/2.4.6 #服务器软件版本
 21.Server Hostname:        192.168.176.30 #服务器主机名
 22.Server Port:            80 #服务器端口
 23.
 24.Document Path:          /index.html #测试的页面
 25.Document Length:        9 bytes #页面的字节数 
 26.Concurrency Level:      900 #请求的并发数,代表着访问的客户端数量
 27.Time taken for tests:   0.489 seconds #整个测试花费的时间
 28.Complete requests:      1000 #成功的请求数量
 29.Failed requests:        0 #失败的请求数量
 30.Write errors:           0
 31.Total transferred:      267000 bytes #整个测试过程的总数据大小(包括header头信息等)
 32.HTML transferred:       9000 bytes #整个测试过程HTML页面实际的字节数
 33.Requests per second:    2045.81 [#/sec] (mean) #每秒处理的请求数,这是非常重要的参数,体现了服务器的吞吐量                                               
 34.
 35.            #后面括号中的 mean 表示这是一个平均值
 36.Time per request:       439.923 [ms] (mean) #平均请求响应时间,括号中的 mean 表示这是一个平均值
 37.#每个请求的时间 0.489[毫秒],意思为在所有的并发请求每个请求实际运行时间的平均值
 38.#由于对于并发请求 cpu 实际上并不是同时处理的,而是按照每个请求获得的时间片逐个轮转处理的
 39.#所以基本上第一个 Time per request 时间约等于第二个 Time per request 时间乘以并发请求数
 40.Time per request:       0.489 [ms] (mean, across all concurrent requests) 
 41. 
 42.Transfer rate:          533.43 [Kbytes/sec] received #传输速率,平均每秒的流量
 43.                                                      #可以帮助排除是否存在网络流量过大导致响应时间延长的问题
 44. Connection Times (ms) #连接时间              
 45. 
 46.           min  mean[+/-sd]#平均时间和标准差 median#中位数   max
 47. Connect:        0   17  11.8                    21           34
 48.  Processing:     1  145 153.9                    35           446
 49.  Waiting:        1  145 153.9                    35           446
 50.  Total:         16  163 161.2                    63           474 
 51.  
 52.  Percentage of the requests served within a certain time (ms) #在一定的时间内提供服务的请求的百分比
 53.    50%    63  
 54.    66%    244  
 55.    75%    255  
 56.   80%    260  
 57.    90%    468  
 58.    95%    471  
 59.    98%    474  
 60.    99%    474 
 61.    100%    474 (longest request)


Apache Bench作为一款高效、轻量的压力测试工具,虽然在图形化界面和实时监控上有所欠缺,但它凭借简单易用的特性,仍然是日常工作中快速检测服务器性能的首选工具之一。通过合理配置参数并分析测试结果,用户能够对服务器性能有更深入的了解,从而为进一步的优化和改进提供有力依据。

想了解更多Linux相关的分享欢迎上蓝队云官网查询,更多免费技术学习文档,蓝队云期待与您一起探索。


提交成功!非常感谢您的反馈,我们会继续努力做到更好!

这条文档是否有帮助解决问题?

非常抱歉未能帮助到您。为了给您提供更好的服务,我们很需要您进一步的反馈信息:

在文档使用中是否遇到以下问题: