ab - Apache HTTP server benchmarking tool

  • 利用Apache ab对网站的性能测试
  • ab每次只能测试一个URL,适合做重复压力测试,支持POST方式
  • 压力测试
    • 定义
    • 关键指标
      • 服务器有关的最重要两个指标,其主要反映的是QPS和RT
      • 每秒请求数(即服务器的吞吐量) – Requests per second
      • 用户平均请求等待时间(请求延迟) – Time per request
    • 服务器压力测试的若干指标
      • 吞吐率
        • 服务器处理并发请求的能力
        • 计算公式为: 总请求数 / 完成所有请求花费的总时间
        • 需要注意的是,吞吐率不能脱离并发数(并发用户数)而单独存在,在不同的并发数情况下,即使总请求数一样,并发数也可能会不一样
      • 并发连接数
        • 并发连接数指某个时刻服务器处理的连接数
        • 此概念的某个时刻是一个特定的时间点
        • 并发用户数的概念和并发连接数密切相关,并发连接数一定大于等于并发用户数(一个用户可能同时发送多个并发请求)
      • 用户请求平均等待时间
        • 处理完所有请求花费总时间 / 并发用户数
      • 服务器平均请求完成时间
        • 处理完所有请求所花费时间/总请求数
        • 吞吐率的倒数,也和并发数密切相关,不能脱离并发数来描述服务器平均请求等待时间

评价

  • 标准可参考国外的3/5/10原则:
    1. 在3秒钟之内,页面给予用户响应并有所显示,可认为是“很不错的”
    2. 在3~5秒钟内,页面给予用户响应并有所显示,可认为是“好的”
    3. 在5~10秒钟内,页面给予用户响应并有所显示,可认为是“勉强接受的”
    4. 超过10秒就让人有点不耐烦了,用户很可能不会继续等待下去
  • 大佬指导
    • 可适当因人而异

遇到问题

  • ab一个小bug: 本地访问URL不能用localhost

    • invalid URL Usage: ab [options] [http[s]://]hostname[:port]/path```
      1
      2
      * 解决办法
      * 改用```http://127.0.0.1:端口号/
  • 默认并发数不足

    • 默认原始值为256
    • Too many open files (24)```
      1
      * 解决办法 ```ulimit -n 所需最大并发
      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
      $ ulimit -a
      core file size (blocks, -c) 0
      data seg size (kbytes, -d) unlimited
      file size (blocks, -f) unlimited
      max locked memory (kbytes, -l) unlimited
      max memory size (kbytes, -m) unlimited
      open files (-n) 256
      pipe size (512 bytes, -p) 1
      stack size (kbytes, -s) 8192
      cpu time (seconds, -t) unlimited
      max user processes (-u) 1418
      virtual memory (kbytes, -v) unlimited
      $ ulimit -n 2000
      $ ulimit -a
      core file size (blocks, -c) 0
      data seg size (kbytes, -d) unlimited
      file size (blocks, -f) unlimited
      max locked memory (kbytes, -l) unlimited
      max memory size (kbytes, -m) unlimited
      open files (-n) 2000
      pipe size (512 bytes, -p) 1
      stack size (kbytes, -s) 8192
      cpu time (seconds, -t) unlimited
      max user processes (-u) 1418
      virtual memory (kbytes, -v) unlimited
      • 貌似这个最大并发为2w
  • 无连接,未打开网站
    • reset by peer (54)```
      1
      2
      * 解决办法
      * 后台服务器Run起来

$ ab -n 10000 -c 1000 http://127.0.0.1:8080/

Server Software:
Server Hostname: 127.0.0.1
Server Port: 8080

Document Path: /
Document Length: 51188 bytes

Concurrency Level: 1000
Time taken for tests: 79.990 seconds
Complete requests: 10000
Failed requests: 0
Total transferred: 514000000 bytes
HTML transferred: 511880000 bytes
Requests per second: 125.02 [#/sec] (mean)
Time per request: 7999.024 [ms] (mean)
Time per request: 7.999 [ms] (mean, across all concurrent requests)
Transfer rate: 6275.18 [Kbytes/sec] received

Connection Times (ms)
min mean[+/-sd] median max
Connect: 0 3 8.9 0 40
Processing: 361 7700 1534.6 7740 14918
Waiting: 360 7699 1534.6 7738 14916
Total: 396 7703 1529.1 7740 14946

Percentage of the requests served within a certain time (ms)
50% 7740
66% 8174
75% 8500
80% 8709
90% 9313
95% 9832
98% 10509
99% 11081
100% 14946 (longest request)
```


参考网站

  1. Apache ab性能测试结果分析
  2. 运行ab测试时socket: Too many open files (24) 的解决办法