常用的HTTP服务压测工具
一、压测介绍
1、简介
在项目正式上线之前,我们通常需要通过压测来评估当前系统能够支撑的请求量、排查可能存在的隐藏bug,同时了解了程序的实际处理能力能够帮我们更好的匹配项目的实际需求,节约资源成本。
2、压测相关术语
- 响应时间(RT) :指系统对请求作出响应的时间.
- 吞吐量(Throughput) :指系统在单位时间内处理请求的数量
- QPS每秒查询率(Query Per Second) :“每秒查询率”,是一台服务器每秒能够响应的查询次数,是对一个特定的查询服务器在规定时间内所处理流量多少的衡量标准。
- TPS(TransactionPerSecond):每秒钟系统能够处理的交易或事务的数量
- 并发连接数:某个时刻服务器所接受的请求总数
3、压测常用工具
-
ab
-
wrk
-
jmeter
二、压测工具介绍
1、ab压测
1.1 介绍
ab全称Apache Bench,是Apache自带的性能测试工具。使用这个工具,只须指定同时连接数、请求数以及URL,即可测试网站或网站程序的性能
ab压测官方文档:https://httpd.apache.org/docs/2.4/programs/ab.html
通过ab发送请求模拟多个访问者同时对某一URL地址进行访问,可以得到每秒传送字节数、每秒处理请求数、每请求处理时间等统计数据。ab非常实用,它不仅可以对apache服务器进行网站访问压力测试,也可以对或其它类型的服务器进行压力测试。比如nginx、tomcat、IIS等。
1.2 ab压测使用
1 | ab [options] [http://]hostname[:port]/path |
举例
1 | # 测试某个GET请求接口 |
2、wrk压测
2.1 介绍
wrk 是一款针对 Http 协议的基准测试工具,它能够在单机多核 CPU 的条件下,使用系统自带的高性能 I/O 机制,如 epoll,kqueue 等,通过多线程和事件模式,对目标机器产生大量的负载。
github地址:https://github.com/wg/wrk
优势:
-
轻量级性能测试工具
-
安装简单
-
学习曲线基本为0,几分钟就学会使用了
-
基于系统自带的高性能I/O机制,如epoll,kqueue,利用异步的事件驱动框架,通过很少的线程就可以压出很大的并发量,例如几万、几十万,这是很多性能测试工具无法做到的。
劣势:
- wrk 目前仅支持单机压测,后续也不太可能支持多机器对目标机压测,因为它本身的定位,并不是用来取代 JMeter, LoadRunner 等专业的测试工具。
2.2 安装
这里我通过源码进行安装
1 | # 安装必要的依赖,已经安装了可以忽略 |
2.3 wrk压测简单使用
1 | 使用方法: wrk <选项> <被测HTTP服务的URL> |
举例,当然wrk工具嵌入了lua脚本语言,因此,在自定义压测场景时,可在wrk目录下使用lua定制压测场景
1 | wrk -t8 -c100 -d30s --latency http://127.0.0.1:8080/api/v1/posts?size=10 |
2.4 go-wrk介绍
go-wrk是Go语言版本的wrk
,Windows同学可以使用它来测试,使用如下命令来安装go-wrk
1 | go get github.com/adeven/go-wrk |
使用方法同wrk
类似,基本格式如下:
1 | go-wrk [flags] url |
常用的参数:
1 | -H="User-Agent: go-wrk 0.1 bechmark\nContent-Type: text/html;": 由'\n'分隔的请求头 |
执行测试
1 | go-wrk -t=8 -c=100 -n=10000 "http://127.0.0.1:8080/api/v1/posts?size=10" |