常用的HTTP服务压测工具
文章目录
- 一、压测介绍
- 1、简介
- 2、压测相关术语
- 3、压测常用工具
- 二、压测工具介绍
- 1、ab压测
- 1.1 介绍
- 1.2 ab压测使用
- 2、wrk压测
- 2.1 介绍
- 2.2 安装
- 2.3 wrk压测简单使用
- 2.4 go-wrk介绍
一、压测介绍
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压测使用
ab [options] [http://]hostname[:port]/path# 常用参数如下
-n requests 总请求数
-c concurrency 一次产生的请求数,可以理解为并发数
-t timelimit 测试所进行的最大秒数, 可以当做请求的超时时间
-p postfile 包含了需要POST的数据的文件
-T content-type POST数据所使用的Content-type头信息
举例
# 测试某个GET请求接口
ab -n 10000 -c 100 -t 10 "http://127.0.0.1:8080/api/v1/posts?size=10"
# 测试POST请求接口
ab -n 10000 -c 100 -t 10 -p post.json -T "application/json" "http://127.0.0.1:8080/api/v1/post"
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 安装
这里我通过源码进行安装
# 安装必要的依赖,已经安装了可以忽略
sudo apt install build-essential libssl-dev git unzip
# 从 github 拉取源代码
git clone https://github.com/wg/wrk.git
# 编译
cd wrk
# 可以使用多线程编译来加快速度,make -j8, 8 表示 8个线程一起编译
make
# 把生成的wrk移到一个PATH目录下面
sudo cp wrk /usr/local/bin
2.3 wrk压测简单使用
使用方法: wrk <选项> <被测HTTP服务的URL> Options: -c, --connections <N> 跟服务器建立并保持的TCP连接数量 -d, --duration <T> 压测时间 -t, --threads <N> 使用多少个线程进行压测,压测时,是有一个主线程来控制我们设置的n个子线程间调度 -s, --script <S> 指定Lua脚本路径 -H, --header <H> 为每一个HTTP请求添加HTTP头 --latency 在压测结束后,打印延迟统计信息 --timeout <T> 超时时间 -v, --version 打印正在使用的wrk的详细版本信 <N>代表数字参数,支持国际单位 (1k, 1M, 1G)<T>代表时间参数,支持时间单位 (2s, 2m, 2h)
举例,当然wrk工具嵌入了lua脚本语言,因此,在自定义压测场景时,可在wrk目录下使用lua定制压测场景
wrk -t8 -c100 -d30s --latency http://127.0.0.1:8080/api/v1/posts?size=10
# 使用8个线程200个连接,对bing首页进行了30秒的压测,并要求在压测结果中输出响应延迟信息
wrk -t8 -c200 -d30s --latency http://www.bing.com
2.4 go-wrk介绍
go-wrk是Go语言版本的wrk
,Windows同学可以使用它来测试,使用如下命令来安装go-wrk
go get github.com/adeven/go-wrk
使用方法同wrk
类似,基本格式如下:
go-wrk [flags] url
常用的参数:
-H="User-Agent: go-wrk 0.1 bechmark\nContent-Type: text/html;": 由'\n'分隔的请求头
-c=100: 使用的最大连接数
-k=true: 是否禁用keep-alives
-i=false: if TLS security checks are disabled
-m="GET": HTTP请求方法
-n=1000: 请求总数
-t=1: 使用的线程数
-b="" HTTP请求体
-s="" 如果指定,它将计算响应中包含搜索到的字符串s的频率
执行测试
go-wrk -t=8 -c=100 -n=10000 "http://127.0.0.1:8080/api/v1/posts?size=10"
常用的HTTP服务压测工具相关推荐
- Beetlex之websocket/tls服务压测工具
为了方便压力测试ws服务,Beetlex同样提供相关工具来对ws/wss服务的性能进行测试测试. 安装 可以访问https://github.com/beetlex-io/TCPBenchmarks ...
- Beetlex之tcp/tls服务压测工具
在编写tcp服务的时候经常需要对服务的基础性能进行一个压力测试,虽然网上这些工具有很多,但具备使用方便和高强度的测试工具则不多.为了方便这方面的高强度压测所以在beetlex的基础扩展这样一个工具. ...
- web版本 开源压测工具_开源了一个简单的http服务压测工具Alex,自带web ui,golang实现...
Alex是基于vegeta library和boom封装的压力测试web UI.Vegeta提供稳定的qps压力源,boom提供稳定的并发数压力源. github地址 https://github.c ...
- 如何使用 PTS 快速发起微服务压测
作者:亦炎 什么是微服务 通常而言,微服务架构是一种架构模式或者说是一种架构风格. 本文阐述了: 什么是微服务架构 微服务架构对系统稳定性带来的影响,以及用性能测试验证稳定性的必要性 用户进行微服务压 ...
- 常用性能压测工具实战总结
### 一.压测背景 >以前:未出社会之前经常用AB工具来压测自己的 nginx 欢迎页面,看着服务器的资源从20%到100%,发现原来一个开源的工具都可以把一台4C8G的虚拟机压爆满,然后就陷 ...
- python服务端多进程压测工具
本文描述一个python实现的多进程压测工具,这个压测工具的特点如下: 多进程 在大多数情况下,压测一般适用于IO密集型场景(如访问接口并等待返回),在这种场景下多线程多进程的区分并不明显(详情请参见 ...
- 几款常用压测工具介绍与使用
现在市面上的压测工具数不胜数,挑几款常用的做个简单的介绍. 1.Apache ab ab是apache自带的压力测试工具,使用起来非常方便 . 安装 1. ab运行需要依赖apr-util包,安装命令 ...
- web版本 开源压测工具_Web服务压测神器wrk
wrk是一款开源的高性能http压测工具(也支持https),很是小巧,能够执行文件只有3M(其中主要是luajit和openssl占用绝大多数空间),别看核心代码3-5年没更新了,但依旧很是好用.虽 ...
- 简单常用的http压测工具
在项目正式上线之前,通常需要通过压测来评估当前系统能够支撑的请求量.排查可能存在的隐藏bug. 目录 压测相关术语 压测工具 ab 命令格式 使用 wrk 命令参数 使用 go-wrk 安装 使用 压 ...
最新文章
- (已解决)IT IS POSSIBLE THAT SOMEONE IS DOING SOMETHING NASTY。Someone could be eavesdropping on you
- OCR识别-python版(一)
- 矩阵化为行最简形矩阵计算器_[内附完整源码和文档] 基于C++的小型特殊计算器...
- iOS-NSThread编程详解
- c语言优化冒泡法,C语言:冒泡法排序一组数,如何优化?
- JavaScript中语句与函数的执行辨析
- 10_android打包的过程
- 读书笔记——并行处理器架构
- 大学计算机应用经典案例,大学计算机基础经典实验案例集
- STM32单片机的优缺点分析
- 软件测试面试两个月,我是如何进入奇虎360?面试总结分享给大家
- 高中数学竞赛与自主招生内部练习试题
- html编写扑克牌游戏,用js编写扑克牌小游戏
- 新浪短网址生成java_新浪短链接 推荐几个最新的新浪t.cn短链接生成的API接口
- SAP BASIS ADM100 中文版 Unit 5(1)
- 改变屏幕分辨率的小程序
- mysql score表_Mysql数据库练习题student,score表
- cmd结束指定端口号的进程
- Allegro建立机械符号
- An internal error occurred during: “Enabling Maven Dependency Management”. Unsup