字节笔记本字节笔记本

ab(Apache Bench)是Apache自带的一个用于测试HTTP服务器性能的工具

2023-02-27

`ab`(Apache Bench)是Apache自带的工具,用于测试HTTP服务器性能,支持测试多个URL和POST请求的性能,并提供详细的测试结果分析。

ab(Apache Bench)是Apache自带的一个用于测试HTTP服务器性能的工具

测试多个URL的性能

$ ab -n 100 -c 10 -L urls.txt

这个命令将从urls.txt文件中读取多个URL,并对每个URL进行100次请求,10个并发用户。测试结果将按URL分组输出。

测试POST请求的性能

$ ab -n 100 -c 10 -p postdata.json  -T 'application/json' http://example.com/

这个命令将使用POST方法发送JSON格式的数据到http://example.com/,并输出测试结果。其中,postdata.txt文件包含要发送的数据,-T参数指定了发送数据的Content-Type。

返回结果

This is ApacheBench, Version 2.3 <$Revision: 1879490 $>
Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Licensed to The Apache Software Foundation, http://www.apache.org/

Benchmarking 127.0.0.1 (be patient)
Completed 100 requests
Completed 200 requests
Completed 300 requests
Completed 400 requests
Completed 500 requests
Completed 600 requests
Completed 700 requests
Completed 800 requests
Completed 900 requests
Completed 1000 requests
Finished 1000 requests


Server Software:        uvicorn
Server Hostname:        127.0.0.1
Server Port:            8080

Document Path:          /parse
Document Length:        179 bytes

Concurrency Level:      10
Time taken for tests:   5.825 seconds
Complete requests:      1000
Failed requests:        0
Total transferred:      324000 bytes
Total body sent:        274000
HTML transferred:       179000 bytes
Requests per second:    171.68 [#/sec] (mean)
Time per request:       58.247 [ms] (mean)
Time per request:       5.825 [ms] (mean, across all concurrent requests)
Transfer rate:          54.32 [Kbytes/sec] received
                        45.94 kb/s sent
                        100.26 kb/s total

Connection Times (ms)
              min  mean[+/-sd] median   max
Connect:        0    0   0.1      0       2
Processing:     8   58  21.9     53     242
Waiting:        7   44  19.6     43     216
Total:          8   58  22.0     53     242

Percentage of the requests served within a certain time (ms)
  50%     53
  66%     56
  75%     58
  80%     61
  90%     76
  95%     88
  98%    119
  99%    200
 100%    242 (longest request)

ab返回的测试结果包括多个部分,以下是这个例子中每个部分的含义:

  • Server Software: 被测试的HTTP服务器软件名称,这个例子中为uvicorn
  • Server Hostname: 被测试的HTTP服务器的主机名或IP地址,这个例子中为127.0.0.1
  • Server Port: 被测试的HTTP服务器监听的端口号,这个例子中为8080
  • Document Path: 被测试的HTTP请求的URL路径,这个例子中为/parse
  • Document Length: 服务器返回的HTTP响应正文长度,单位为字节,这个例子中为179字节。
  • Concurrency Level: 测试中使用的并发用户数,这个例子中为10
  • Time taken for tests: 测试总共用时,单位为秒,这个例子中为5.825秒。
  • Complete requests: 完成的请求数,这个例子中为1000
  • Failed requests: 失败的请求数,这个例子中为0
  • Total transferred: 客户端发送和服务器接收的所有数据量之和,单位为字节,这个例子中为324000字节。
  • Total body sent: 客户端发送的HTTP请求正文的总长度,单位为字节,这个例子中为274000字节。
  • HTML transferred: 客户端发送和服务器接收的HTTP响应正文的总长度,单位为字节,这个例子中为179000字节。
  • Requests per second: 平均每秒完成的请求数,这个例子中为171.68个/秒。
  • Time per request: 平均每个请求的处理时间,单位为毫秒,这个例子中为58.247毫秒。
  • Time per request (across all concurrent requests): 平均每个请求的处理时间,单位为毫秒,这个例子中为5.825毫秒。这个数值包括了所有并发用户的请求处理时间。
  • Transfer rate: 平均每秒传输的数据量,包括发送和接收的数据,单位为千字节/秒。这个例子中,服务器接收的数据量为54.32千字节/秒,客户端发送的数据量为45.94千字节/秒,总共传输的数据量为100.26千字节/秒。
  • Connection Times: 请求连接的各个阶段的时间分布情况,包括Connect(建立连接)、Processing(请求处理)、Waiting(等待响应)和Total(总时间)。
  • Percentage of the requests served within a certain time: 完成请求的时间百分比。例如,50%的请求处理时间在53毫秒以内,80%的请求处理时间在61毫秒以内,99%的请求处理时间在200毫秒以内

要找到接口的极限值,可以通过逐渐增加并发数的方式来测试。具体步骤如下:

  1. 从一个比较低的并发数开始测试,例如10或20,并记录每个并发数下的响应时间、成功请求数、失败请求数等指标。
  2. 逐步增加并发数,例如每次增加10个并发数。每次增加并发数后,记录相应的响应时间、成功请求数、失败请求数等指标。
  3. 当增加并发数后,响应时间明显增长,成功请求数和失败请求数的变化不大,且出现了错误请求时,这时候就可以认为已经接近接口的极限值。
  4. 在接近极限值时,可以适当增加测试时间和请求次数,以便更准确地评估接口的性能。
  5. 在测试完毕后,整理并分析测试结果,得到接口的性能指标,包括最大并发数、响应时间、成功请求数、失败请求数等。通过这些指标可以了解接口的性能瓶颈所在,并采取相应的优化措施来提高接口的性能。