压测常用工具有:ab、http_load、webbench、siege。其中 ab 就是一个非常使用的命令,可以测试近乎所有的服务器,他的命令格式如下
ab -h
其中-n表示请求数,-c表示并发数
ab -n 100 -c 10 https://blog.souche.com/
ab 有限制,并发数不能超过 100。寻求其他做压力测试的工具。
具体运行如下:
$ ab -n 100 -c 10 https://blog.souche.com/
This is ApacheBench, Version 2.3 <$Revision: 1826891 $> (服务器版本)
Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Licensed to The Apache Software Foundation, http://www.apache.org/
Benchmarking blog.souche.com (be patient).....done
Server Software:
Server Hostname: blog.souche.com
Server Port: 443
SSL/TLS Protocol: TLSv1.2,ECDHE-RSA-AES128-GCM-SHA256,2048,128
TLS Server Name: blog.souche.com
Document Path: /
Document Length: 41251 bytes (此URL返回的文档大小)
Concurrency Level: 10 (并发数)
Time taken for tests: 7.713 seconds (压测消耗总时间)
Complete requests: 100 (总请求数)
Failed requests: 0
Total transferred: 4153100 bytes (传输的总数据量)
HTML transferred: 4125100 bytes (HTML 文档的总数据量)
Requests per second: 12.96 [#/sec] (mean) (吞吐率,也就是平均每秒请求数)
Time per request: 771.332 [ms] (mean) (用户平均请求等待时间:总消耗时间/(总请求数/并发用户数))
Time per request: 77.133 [ms] (mean, across all concurrent requests) (服务器平均请求等待时间:总消耗时间/总请求数)
Transfer rate: 525.81 [Kbytes/sec] received (传输速率)
Connection Times (ms)
min mean[+/-sd] median max
Connect: 31 59 20.7 57 168
Processing: 114 670 121.1 664 924
Waiting: 101 652 121.6 652 905
Total: 247 729 120.1 730 1085
Percentage of the requests served within a certain time (ms)
50% 730
66% 755
75% 779
80% 809
90% 909
95% 950
98% 966
99% 1085
100% 1085 (longest request)
吞吐率(Requests per second)是越大越好。
如果把上面的命令换成 ab -n 1000 -c 100 https://blog.souche.com/
,做个更大压力的测试,最关键的几条测试结果如下:
Requests per second: 15.61 [#/sec] (mean) (平均每秒请求数)
Time per request: 6407.951 [ms] (mean) (用户平均请求等待时间)
Time per request: 64.080 [ms] (mean, across all concurrent requests) (服务器平均请求等待时间)
Transfer rate: 632.93 [Kbytes/sec] received
似乎性能还提高了?这是因为吞吐率指的是在某个并发用户数下单位时间内处理的请求数,不同并发用户数下,吞吐率一般是不同的,其数值自然是越大越好。
ab 的原理
ab 是 ApacheBench 命令的缩写。会创建多个并发线程访问,模拟多个访问者同时对某一 URL 地址进行访问。它的测试目标是基于 URL 的,因此,它既可以用来测试 apache 的负载压力,也可以测 试nginx、lighthttp、tomcat、IIS 等其它 Web 服务器的压力。
ab 命令对发出负载的计算机要求很低,它既不会占用很高CPU,也不会占用很多内存。但却会给目标服务器造成巨大的负载。类似 CC 攻击。