ab
ab是apache自带的压力测试工具,使用起来非常方便.
安装
如果安装了apache, 那么ab已经安装好了,如果不想安装apache的话,可以通过以下方式安装ab
# ubuntu
sudo apt-get install apache2-utils
# centos
yum -y install httpd-tools
压测
在压测前,需要关注几个选项,通过 ab -help 查看
Options are:
-n requests 要执行的请求次数
-c concurrency 并发数量
-s timeout 响应时间
执行
ab -n 1000 -c 100 -s 1 http://127.0.0.1:1080/event?config_name=mysql_config
# 总共100个并发执行1000此请求,超时时间为1s
结果分析
在执行上述测试命令后,得到如下结果,主要关注以下几个指标:
Failed requests:失败的请求
Requests per second:也就是常说的QPS, 每秒查询率,这是一个平均值
Time per request:完成一个请求所花费的时间
Transfer rate: 网络传输速度。 对于大文件的请求测试,这个值很容易成为系统瓶颈所在 要确定该值是不是瓶颈,需要了解客户端和被测服务器之间的网络情况,包括网络带宽和网卡速度等信息。
Server Software:
Server Hostname: 127.0.0.1
Server Port: 1080
Document Path: /event?config_name=mysql_config
Document Length: 0 bytes
Concurrency Level: 100
Time taken for tests: 0.137 seconds
Complete requests: 1000
Failed requests: 0
Total transferred: 75000 bytes
HTML transferred: 0 bytes
Requests per second: 7275.11 [#/sec] (mean)
Time per request: 13.745 [ms] (mean)
Time per request: 0.137 [ms] (mean, across all concurrent requests)
Transfer rate: 532.84 [Kbytes/sec] received
Connection Times (ms)
min mean[+/-sd] median max
Connect: 0 1 1.0 1 5
Processing: 1 12 5.9 11 30
Waiting: 1 11 5.9 11 29
Total: 1 13 6.1 13 30
Percentage of the requests served within a certain time (ms)
50% 13
66% 15
75% 17
80% 18
90% 22
95% 25
98% 28
99% 29
100% 30 (longest request)
wrk
wrk 是一款c语言开发的现代的http性能基准测试工具,使用简单,功能强大。
安装
安装可以从github上下载源码编译安装 wrk github地址
压测
wrk的命令选项并不多,很容易使用
Usage: wrk
Options:
-c, --connections 建立的连接
-d, --duration 执行测试时间
-t, --threads 线程数量
-s, --script 使用lua脚本(非常强大的功能,有兴趣可以深入研究)
-H, --header 为每一个HTTP请求添加HTTP头
--latency 在压测结束后,打印延迟统计信息
--timeout 超时时间
-v, --version Print version details
Numeric arguments may include a SI unit (1k, 1M, 1G)
Time arguments may include a time unit (2s, 2m, 2h)
wrk -c100 -t10 -d30s http://127.0.0.1:1080/event?config_name=mysql_config
# 10个线程100个连接压测30s
结果分析
wrk生成的结果报告比较简洁,主要关注的点和ab差不多
Requests/sec: QPS
Transfer/sec: 网络传输速度
Running 30s test @ http://127.0.0.1:1080/event?config_name=mysql_config
10 threads and 100 connections
Thread Stats Avg Stdev Max +/- Stdev
Latency 21.02ms 92.04ms 1.05s 97.79%
Req/Sec 1.22k 229.72 2.38k 75.47%
365483 requests in 30.07s, 26.14MB read
Requests/sec: 12152.63
Transfer/sec: 0.87MB
jmeter
jmeter 是由java编写的一个GUI测试工具,功能强大且结果多样
安装
使用
建立 Plan
image
建立Thread Group
建立好 Plan后就可以建立 Thread Group 了, 建立方式
选中Plan 后, Edit > Add > Threads > Thread Group
image
Thread Group 可以设置线程的一些参数,主要是 Number of Threads(users) 和 Loop Count
添加Listener
Listener主要生成一些结果报告,添加方式为
选中Thread Group后 Edit > Add > Listener
image
可以看到有很多结果报告,我平时主要用到以下几个结果报告
View Results Tree
Aggregate Report
Graph Results
View Results Table
View Results Tree
这个报告会生成请求树,点击可以查看每个请求的信息
image
Aggregate Report
这个报告会生成请求的聚合统计信息, 主要参数就是QPS, 传输速度等
image
Graph Results
强大的图形报告结果
image
图形结果一些说明
No of Samples(样本数): 代表向服务器发送的请求数目
Deviation(偏离):代表服务器相应时间变化的数据的分布
Latest Sample(最新样本): 表示服务器相应最后一个请求的时间
Throughtput(吞吐率):这里是服务器每分钟对数据的处理量
Average(平均值): 表示总运行的时间除以发送给服务器的请求数
Median(中间值): 代表有一半的服务器时间低于该值,而另一半高于该值
根据图形结果得到的一些分析
吞吐率起步的时候比较低,随着请求数量越来越多,吞吐率先增后减
偏离值还不错,保持一个很平稳的状态 如果偏离数量随着请求数量越来越大, 说明服务器越来越不稳定