本文的核心内容:Web压力测试指标,ab压测与Siege压测工具的使用。
为了测试接口的性能、我们需要对接口进行压力测试,看看接口能承受多大访问量、在大访问量情况下性能怎样,这些数据指标好坏将会直接影响接口调用方的前端展示效果。
1.TPS(transaction per second)
每秒钟完成的web请求响应数量
TPS=并发数/响应时间
TPS是衡量系统性能的重要指标
2.并发数
并发用户数是指系统可以同时承载的正常使用系统功能的用户的数量。
3.响应时间
响应时间是指系统对请求作出响应的时间。
4.吞吐量
吞吐量指的是单位时间系统传输数据总量。
可知吞吐量和TPS,并发数这两个因素是正比关系。
但是当TPS,并发数达到极限值时,吞吐量不升反降,这是因为系统资源产生了大的消耗。
ab是apachebench命令的缩写。
ab的原理:ab命令会创建多个并发访问线程,模拟多个访问者同时对某一URL地址进行访问。它的测试目标是基于URL的,因此,它既可以用来测试apache的负载压力,也可以测试nginx、tomcat等其它Web服务器的压力。
1)ab安装
yum -y install httpd-tools
[root@vic html]# ab -V
This is ApacheBench, Version 2.3 <$Revision: 655654 $>
Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Licensed to The Apache Software Foundation, http://www.apache.org/
2)ab 常用参数
常用请求参数:-n请求次数,-c并发数 -X 代理ip:代理端口
-n requests 请求次数
-c concurrency 并发数
-t timelimit 持续测试时间 单位[s]
-X proxy:port 代理ip:代理端口
ab -n 100 -c 10 "http://url/eachtradedata/capital/data?stock=000001&startdate=20190625&enddate=20190627"
3)测试报告说明:
[root@hexin ~]# ab -n 100 -c 10 "http://url/eachtradedata/capital/data?stock=000001&startdate=20190625&enddate=20190627"
[1] 22497
[2] 22498
一般我们需要关心 Requests per second和 Transfer rate。 一般接口rps需要满足>=300,并且 99.9的响应请求保证在300ms内
Connection Times (ms)和请求响应时间分布(Percentage of the requests served within a certain time (ms)) 几部分进行分析
Server Software: openresty
Server Hostname: url
Server Port: 80
Document Path: /eachtradedata/capital/data?stock=000001&startdate=20190625&enddate=20190627
Document Length: 130 bytes
Concurrency Level: 10 (并发数, -c 参数)
Time taken for tests: 1.277 seconds (总共执行时间)
Complete requests: 100 (请求数)
Failed requests: 0 (可以忽略这个值,不准)
Write errors: 0
Non-2xx responses: 100
Total transferred: 26800 bytes (总共传输的数据量,指的是ab从被测服务器接收到的总数据量)
HTML transferred: 13000 bytes
Requests per second: 78.28 [#/sec] (mean) (平均(mean)每秒完成的请求数:QPS,这是一个平均值,等于Complete requests/Time taken)
Time per request: 127.740 [ms] (mean)
Time per request: 12.774 [ms] (mean, across all concurrent requests)
Transfer rate: 20.49 [Kbytes/sec] received (网络传输速度。对于大文件的请求测试,这个值很容易成为系统瓶颈所在。要确定该值是不是瓶颈,需要了解客户端和被测服务器之间的网络情况,包括网络带宽和网卡速度等信息)
注:min(最小值) mean(平均值)[+/-sd](方差) median(中位数) max(最大值)
Connection Times (ms)
min mean[+/-sd] median max
Connect: 0 0 0.1 0 1 socket链路建立消耗,代表网络状况好坏
Processing: 9 122 86.3 101 350 写入缓冲区消耗+链路消耗+服务端消耗
Waiting: 9 121 86.0 100 350 写入缓冲区消耗+链路消耗+服务端消耗+读取数据消耗
Total: 9 122 86.3 102 350 对整个请求时间统计结果
可以着重关心一下mean[+/-sd], 如果两个值相关特别大说明稳定性上存在问题
Percentage of the requests served within a certain time (ms)
50% 102
66% 149
75% 184
80% 218
90% 266
95% 270
98% 298
99% 350
100% 350 (longest request)
这个表第一行表示有50%的请求都是在102ms内完成的, 以此类推,99%的请求是小于等于350ms的。
安装siege
为了支持https,需要先下载安装openssl
openssl地址:https://github.com/openssl/openssl
git clone https://github.com/openssl/openssl
cd openssl
./config --prefix=/usr/local/openssl
make
make install
openssl version
openssl安装完毕后,开始安装siege
siege地址:http://download.joedog.org/siege/siege-4.0.4.tar.gz
tar zxvf siege-4.0.4.tar.gz
cd siege-4.0.4
make clean
./configure --prefix=/usr/local/siege --with-ssl=/usr/local/openssl
make
make install
注意:siege默认只支持255个并发数,可以自己自定义,修改/root/.siege/siege.conf下的limit数值。
1)使用说明
使用方式: siege [options] URL
示例: siege -c 10 -t 1m $url 模拟10个用户并发请求$url,持续1分钟
2)多url测试
1. 登录测试服务器准备需要模拟的请求列表文件,文件内容每行一个url
url格式 http://host[:port]/request_uri
2. 请求示例: siege -c 200 -t 10s -f url.txt 并发100个用户持续10s, 随机从文件url.txt读取url
Options:
-g, --get Get请求
-c, --concurrent=NUM 并发请求数,默认 10
-r, --reps=NUM 循环测试次数
-t, --time=NUMm 测试时长: m[分],s[秒],H[小时] -t 1H 标识测试1小时
-d, --delay=NUM 两次读取url延迟请求间隔时间
-b, --benchmark 两次读取url间隔时间0,没有延迟
-i, --internet 随机读取url
-f, --file=FILE FILE, select a specific URLS FILE.
-l, --log[=FILE] LOG to FILE. If FILE is not specified, the
default is used: PREFIX/var/siege.log
-H, --header="text" Add a header to request (can be many)
-A, --user-agent="text" Sets User-Agent in request
-T, --content-type="text" Sets Content-Type in request
--no-parser NO PARSER, turn off the HTML page parser
--no-follow NO FOLLOW, do not follow HTTP redirects
3)测试报告说明
siege -c 100 -t 10s "url/eachtradedata/capital/data?stock=000001&startdate=20190625&enddate=20190627"
Lifting the server siege...
Transactions: 1068 hits 总请求次数
Availability: 100.00 % 成功率
Elapsed time: 9.39 secs 测试总时间
Data transferred: 0.55 MB 总数据传输大小
Response time: 1.63 secs 响应时间,显示网络连接的速度
Transaction rate: 113.74 trans/sec 平均每秒完成次处理请求数
Throughput: 0.06 MB/sec 平均每秒传输数据
Concurrency: 185.51
Successful transactions: 1068 最大连接数
Failed transactions: 0 失败请求次数
Longest transaction: 3.35 最长请求时间
Shortest transaction: 0.19 最短请求时间