- 利用Apache ab对网站的性能测试
- ab每次只能测试一个URL,适合做重复压力测试,支持POST方式
- 压力测试
- 定义
- 关键指标
- 服务器有关的最重要两个指标,其主要反映的是QPS和RT
- 每秒请求数(即服务器的吞吐量) – Requests per second
- 用户平均请求等待时间(请求延迟) – Time per request
- 服务器压力测试的若干指标
- 吞吐率
- 服务器处理并发请求的能力
- 计算公式为: 总请求数 / 完成所有请求花费的总时间
- 需要注意的是,吞吐率不能脱离并发数(并发用户数)而单独存在,在不同的并发数情况下,即使总请求数一样,并发数也可能会不一样
- 并发连接数
- 并发连接数指某个时刻服务器处理的连接数
- 此概念的某个时刻是一个特定的时间点
- 并发用户数的概念和并发连接数密切相关,并发连接数一定大于等于并发用户数(一个用户可能同时发送多个并发请求)
- 用户请求平均等待时间
- 处理完所有请求花费总时间 / 并发用户数
- 服务器平均请求完成时间
- 处理完所有请求所花费时间/总请求数
- 吞吐率的倒数,也和并发数密切相关,不能脱离并发数来描述服务器平均请求等待时间
- 吞吐率
评价
- 标准可参考国外的3/5/10原则:
- 在3秒钟之内,页面给予用户响应并有所显示,可认为是“很不错的”
- 在3~5秒钟内,页面给予用户响应并有所显示,可认为是“好的”
- 在5~10秒钟内,页面给予用户响应并有所显示,可认为是“勉强接受的”
- 超过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)
```