基准测试工具(压测工具):wrk---高并发、损耗低,安装简单 (一)
基准测试工具:Wrk初识
最近和同事聊起常用的一些压测工具,谈到了Apache ab、阿里云的PTS、Jmeter、Locust以及wrk各自的一些优缺点和适用的场景类型。
这篇博客,简单介绍下HTTP基准测试工具wrk的基本使用方法。。。
一、压测工具对比
工具名称 | 类型 | 多协议支持 | 优缺点 | 适用人群&场景 |
Apache ab | 开源 | HTTP | Apache自带源生测试工具,安装部署简单,不适合多协议及复杂场景 | 开发:单机&单接口性能基准验证 |
PTS | 商业 | 多协议(支持不太好) | 阿里云配套收费压测工具,支持多协议链路压测,功能完善 | 技术人员:基准&链路&高并发 |
Jmeter | 开源 | 多协议 | 使用率高&学习成本低,多协议复杂场景支持良好,受限于机制,资源损耗较高 | 技术人员:多场景&万级以下并发全场景 |
Locust | 开源 | 多协议(需二次开发) | python开源压测框架,支持多协议&复杂场景(需二次开发,定制化) | 技术人员:性能测试&支持程度取决于定制开发 |
Wrk | 开源 | HTTP | HTTP基准测试工具,高并发低损耗,安装部署简单,不适合多协议及复杂场景 | 开发:单机&单接口性能基准验证 |
二、简介及安装
1、简介
Wrk是一个支持HTTP协议的基准测试工具,结合了多线程设计和可扩展事件通知,底层封装epoll(linux)和kqueue(bsd),能用较少线程生成大量并发请求(使用了操作系统特定的高性能io机制)。
源生支持LuaJIT脚本,可以执行HTTP发起请求、响应处理和自定义测试报告;SCRIPTING有详细说明,并且scripts中提供了几个示例。
GitHub地址:Wrk
2、安装
Point:wrk托管与github,前先安装Git;依赖gcc和OpenSSL(阿里云Centos服务默认已有)库,如下载报错,安装即可!命令如下:
# 下载命令
git clone https://github.com/wg/wrk.git
# 进入wrk文件夹
cd wrk
# 编译
make
编译需要一定时间,耐心等待即可。编译成功后,示例如下:
三、示例demo
1、参数说明
Usage: wrk <options> <url>
Options:
# 脚本开启的HTTP连接数
-c, --connections <N> Connections to keep open
# 测试脚本执行的时长
-d, --duration <T> Duration of test
# 测试脚本使用的线程数
-t, --threads <N> Number of threads to use
# 加载Lua脚本文件
-s, --script <S> Load Lua script file
# 添加请求的信息头
-H, --header <H> Add header to request
# 打印响应的详细信息
--latency Print latency statistics
# 请求超时时间
--timeout <T> Socket/request timeout
# 版本详细信息
-v, --version Print version details
2、示例脚本
[root@localhost wrk]# ./wrk -t4 -c100 -d60s --latency http://www.cnblogs.com/imyalost
Running 1m test @ http://www.cnblogs.com/imyalost
4 threads and 100 connections
Thread Stats Avg Stdev Max +/- Stdev
Latency 196.87ms 318.88ms 1.90s 86.33%
Req/Sec 316.86 220.75 3.19k 75.19%
Latency Distribution
50% 5.73ms
75% 259.62ms
90% 615.77ms
99% 1.47s
73434 requests in 1.00m, 11.06MB read
Socket errors: connect 0, read 2, write 0, timeout 267
Requests/sec: 1222.07
Transfer/sec: 188.51KB
结果解析:
4 threads and 100 connections :4个线程,发起100个http连接请求;
Thread Stats Avg Stdev Max +/- Stdev :测试结果统计(精简版jmeter的聚合报告),分别是:平均值、标准偏差、最大值、偏差比(值越高表示测试结果离散程度越高,性能波动较大);
Latency :响应时间分布(即百分比响应时间范围);
Req/Sec :每秒完成的请求数;
Latency Distribution :如上面的示例结果,分别代表50/75/90/99%的响应时间在多少ms以内;
73434 requests in 1.00m, 11.06MB read :本次测试共计在1min内发起73434个请求,总计读取11.06MB的数据;
Socket errors: connect 0, read 2, write 0, timeout 267 :本次测试中,连接失败0个,读取错误2个,超时267个;
Requests/sec :所有线程平均每秒钟完成1222.07个请求;
Transfer/sec :平均每秒读取188.51KB数据(吞吐量);
3、更多用法
前文提到了wrk支持LuaJIT脚本,可以执行HTTP发起请求、响应处理和自定义测试报告,wrk提供的几个lua函数作用如下:
是不是发现和selenium自动化很像,特别是setup和init函数(手动狗头)。。。
以上就是关于基准测试工具Wrk的简单用法和几种常见的压测工具对比,上面的脚本仅是个demo,具体使用方法请自行实践。。。
其实吧,我觉得这个工具更适合开发童鞋写好一个新的接口后,自己测试一下,这样也不用等出性能问题了才想起来要找性能测试同学压测。。。
原文地址:https://www.cnblogs.com/zhengyao9236/p/11572961.html
- CodeSmith 创建Ado.Net自定义模版(三)
- Android注解学习(2)
- Android注解学习(2)
- 机器学习之——距离度量学习
- Enterprise Library Policy Injection Application Block 之三:PIAB的扩展—创建自定义CallHandler(提供Source Code下载)
- CodeSmith 创建Ado.Net自定义模版(四)
- TensorFlow图像分类教程
- Enterprise Library Policy Injection Application Block 之一: PIAB Overview
- Python教学——第七天
- 大数据将带来电视媒体生态式变革!大数据如何深度融合电视媒体?
- Silverlight SEO优化
- Silverlight性能优化
- WCF后续之旅(6): 通过WCF Extension实现Context信息的传递
- WCF后续之旅(6): 通过WCF Extension实现Context信息的传递
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 文本处理三剑客之—awk
- Python办公自动化|批量提取Excel数据
- 3分钟短文 | 有挑战!PHP用1个函数实现post请求,你用哪个?
- linux 磁盘管理
- linux 安装各个版本nodejs
- python3 使用cookie模拟post实现修改活码内容
- VIM 创建程序文件自动添加头部注释
- 【简记】Linux 计划任务 Crontab
- VS Code 免密登录Linux服务器
- Linux部署私钥实现免密登录
- 搭建Jenkins+tomcat+maven+Gitlab持续部署/回滚系统
- Java--注解
- 如何在 Ubuntu 20.04 上安装 Jenkins
- 在 Linux 下如何检查内存使用率
- 3分钟短文 | MySQL存时间,到底该用timestamp还是datetime?