Wrk压测发送Post请求的正确姿势

一、Wrk简介

wrk 是一个能够在单个多核 CPU 上产生显著负载的现代 HTTP 基准测试工具。它采用了多线程设计,并使用了像 epoll 和 kqueue 这样的可扩展事件通知机制。此外,用户可以指定 LuaJIT 脚本来完成 HTTP 请求生成、响应处理和自定义报告等功能。

二、Wrk安装

wrk仅支持Linux和Unix系列,并不支持Windows

  1. Clone wrk
git clone https://github.com/wg/wrk.git
  1. 编译安装
cd wrk; make; cp wrk /usr/local/bin

3.验证安装

wrk --help

Usage: wrk <options> <url>                            
  Options:                                            
    -c, --connections <N>  Connections to keep open  
    -d, --duration <T>  Duration of test 
    -t, --threads <N>  Number of threads to use 
                                                      
    -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 
                                                      
  Numeric arguments may include a SI unit (1k, 1M, 1G)
  Time arguments may include a time unit (2s, 2m, 2h)
  
-c 与服务器建立并保持的TCP连接数,其实就是并发数
-d 压测的持续时间(单位为秒),默认为 10s
-t 压测的线程数。正常设置为cpu核心线程数的2-4倍即可。如果线程数过多,会因线程上下文切换频繁,影响到压测效果
-s 指定Lua脚本路径。可以通过Lua脚本实现复杂请求
-H 指定请求的 HTTP Header
--latency 压测结束后,打印响应时间统计消息 
--timeout 请求超时时间 
-v 版本信息

三、Wrk实战压测实战

  1. Get请求
wrk -t32 -c5000 -d60s --timeout 30s --latency https://www.baidu.com/

Running 1m test @ https://www.baidu.com/
  32 threads and 5000 connections
  Thread Stats Avg Stdev Max +/- Stdev
    Latency 6.59s     5.02s   29.57s    79.01%
    Req/Sec 5.14      4.82    36.00     83.11%
  Latency Distribution
     50% 4.91s 
     75% 8.24s 
     90% 13.38s 
     99% 25.42s 
  4677 requests in 1.00m, 51.98MB read
  Socket errors: connect 40, read 0, write 0, timeout 27
Requests/sec: 77.82
Transfer/sec: 0.86MB

a、 Thread Stats 线程统计,包括响应时间以及请求时间
Latency:响应时间,有平均值、标准偏差、最大值、正负一个标准差占比。
Req/Sec:每个线程每秒完成的请求数, 同样有平均值、标准偏差、最大值、正负一个标准差占比。
b、 Latency Distribution 响应时间分布
50%:50% 的响应时间为4.91s。
75%:75% 的响应时间为8.24s 。
90%:90% 的响应时间为13.38s
99%:99% 的响应时间为25.42s。
c、 4677 requests in 1.00m, 51.98MB read 1m 完成的总请求数(4677)和数据读取量(51.98MB)
d、 Socket errors: connect 40, read 0, write 0, timeout 27 错误统计,会统计 connect 连接失败请求个数(40个)、读失败请求个数、写失败请求个数、超时请求个数(27个)。
e、 Requests/sec: 77.82 每秒请求数为77.82(QPS)
f、 Transfer/sec: 0.86MB 平均每秒读取0.86MB数据(TPS)

Get请求非常简单,不做过多赘述。

2.Post请求【重点】

  1. 编写执行Post请求的lua脚本,
--vim post.lua
 wrk.method = "POST"
wrk.body = "{\"gaid\":\"96a940e6-ada5-4e13-9efb-e444610240cf\",\"ip\":\"195.16.186.34\",\"ua\":\"4.10.0 (Linux; U; Android 13; 23021RAAEG MIUI/V15.0.14.0.TMTMIXM) (mipicks; 4003085; 2536)\"}"
wrk.headers["Content-Type"] = "application/json"
response = function(status, headers, body)
  print(body) --调试用,正式测试时需要关闭,因为解析response非常消耗资源
end

Ps:划重点这里网上几乎都是错误的教程,错在将写成 wrk.body = ‘{“gaid”:“96a940e6-ada5-4e13-9efb-e444610240cf”,“ip”:“195.16.186.34”,“ua”:“4.10.0 (Linux; U; Android 13; 23021RAAEG MIUI/V15.0.14.0.TMTMIXM) (mipicks; 4003085; 2536)”}’ 实际上需要对Body体的Json进行转义并且双引号引用

  1. 调用post.lua脚本进行压测调用
wrk -t 16 -c 100 -d 30s --latency --timeout 5s --script=post.lua http://10.90.34.194:8080/v1/click/boosted

四、Wrk总结

总体使用起来非常简单,需要注意的就是执行Post请求压测的时候一定要把lua脚本中的wrk.body写正确,不然被压测Server是取不到Body直接报错的。

五、扫码关注 发现精彩内容

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/295748.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

七牛云cdn图片加载错误:net::ERR_HTTP2_PROTOCOL_ERROR与HTTP2 检测工具

一、问题描述 今天运营的小伙伴提了个问题&#xff0c;她在后台上传图片的时候有时会遇到上传成功了&#xff0c;但实际回显图片却是一张“破图”&#xff1a; 二、原因调查 先了解一下ERR_HTTP2_PROTOCOL_ERROR是什么意思&#xff1a; ERR_HTTP2_PROTOCOL_ERROR是由HTTP/2协…

软件工程:用例图相关知识和多实例分析

目录 一、用例图相关知识 1. 基本介绍 2. 常用符号 二、用例图实例分析 1. 新闻管理系统 2. 医院病房监护系统 3. 实验上机安排系统 4. 远程网络教学系统 一、用例图相关知识 1. 基本介绍 用例图&#xff08;use case diagram&#xff09;是用户与系统交互的最简表示…

关于“Python”的核心知识点整理大全63

目录 20.2.11 使用 Git 跟踪项目文件 1. 安装Git 2. 配置Git 3. 忽略文件 .gitignore 注意 4. 提交项目 20.2.12 推送到 Heroku 注意 20.2.13 在 Heroku 上建立数据库 20.2.14 改进 Heroku 部署 1. 在Heroku上创建超级用户 注意 注意 20.2.11 使用 Git 跟踪项目文件…

C语言编译器(C语言编程软件)完全攻略(第二十六部分:C-Free使用教程(使用C-Free编写C语言程序))

介绍常用C语言编译器的安装、配置和使用。 二十六、C-Free使用教程&#xff08;使用C-Free编写C语言程序&#xff09; 1、安装C-Free 5.0 C-Free 是一款国产的Windows下的C/C IDE&#xff0c;最新版本是 5.0&#xff0c;整个软件才 14M&#xff0c;非常轻巧&#xff0c;安装…

Spring见解2

3.基于注解的IOC配置 学习基于注解的IOC配置&#xff0c;大家脑海里首先得有一个认知&#xff0c;即注解配置和xml配置要实现的功能都是一样的&#xff0c;都是要降低程序间的耦合。只是配置的形式不一样。4 3.1.创建工程 3.1.1.pom.xml <?xml version"1.0" e…

python面试pytorch面试

python面试 python中啥类型是不可更改的&#xff0c;啥类型是可以更改的 为什么Python执行速度慢&#xff0c;我们如何改进它&#xff1f; 自己总结&#xff1a; 1c语言属于编译型语言&#xff1a; 它的代码经过编译后再运行&#xff0c;执行速度快&#xff1b;不能跨平台&am…

SpringIOC之support模块DelegatingMessageSource

博主介绍&#xff1a;✌全网粉丝5W&#xff0c;全栈开发工程师&#xff0c;从事多年软件开发&#xff0c;在大厂呆过。持有软件中级、六级等证书。可提供微服务项目搭建与毕业项目实战&#xff0c;博主也曾写过优秀论文&#xff0c;查重率极低&#xff0c;在这方面有丰富的经验…

基于多反应堆的高并发服务器【C/C++/Reactor】(中)创建并初始化TcpServer实例 以及 启动

对于一个TcpServer来说&#xff0c;它的灵魂是什么&#xff1f;就是需要提供一个事件循环EventLop(EventLoop)&#xff0c;不停地去检测有没有客户端的连接到达&#xff0c;有没有客户端给服务器发送数据&#xff0c;描述的这些动作&#xff0c;反应堆模型能够胜任。当服务器和…

图像处理中的DCT变换

图像处理中的DCT变换 Discrete Cosine Transform&#xff0c;离散余弦变换。 来源及公式推导&#xff0c;可以查看下面链接&#xff0c;介绍的比较详细&#xff0c;这里就不再重复说明了&#xff1a; 详解离散余弦变换&#xff08;DCT&#xff09; - 知乎 (zhihu.com)DCT变换…

DS|图(连通与生成树)

题目一&#xff1a;DS图 -- 图的连通分量 题目描述&#xff1a; 输入无向图顶点信息和边信息&#xff0c;创建图的邻接矩阵存储结构&#xff0c;计算图的连通分量个数。 输入要求&#xff1a; 测试次数t 每组测试数据格式如下&#xff1a; 第一行&#xff1a;顶点数 顶点…

VsCode开发工具的入门及基本使用

大家好&#xff0c;我是[阿猫的故乡]。很高兴能有机会与大家分享关于VsCode开发工具的入门及基本使用的知识。 文章目录 文章目录 前言 一、VsCode是什么&#xff1f; 二、使用步骤 1.如何下载 2.如何使用 总结 前言 在开发者社区中&#xff0c;Visual Studio Code&#xff08…

IPv6路由协议---IPv6静态路由

IPv6路由协议 路由是数据通信网络中最基本的要素。路由信息就是知道报文发送的路径信息,路由的过程就是报文转发的过程。 根据路由目的地的不同,路由可划分: 1.网段路由:目的地为网段,IPv4地址子网掩码长度小于32位或IPv6地址前缀长度小于128位。 2.主机路由:目的地为主…

算法第十一天-递增顺序搜索树

递增顺序搜索树 题目要求 解题思路 1.二叉搜索树&#xff08;BST&#xff09; 2.任意两个不同节点 遇到二叉搜索树&#xff0c;立即想到这句话&#xff1a;[二叉搜索树&#xff08;BST&#xff09;的中序遍历是有序的]。这是解决所有二叉搜索树问题的关键。 要求BST的任意两…

小H靶场笔记:DC-4

DC-4 January 4, 2024 2:37 PM Tags: teehee提权 Owner&#xff1a;只惠摸鱼 信息收集 探测靶机ip&#xff0c;发现应该是192.168.199.134 扫一下开放端口&#xff08;22、80&#xff09;、服务、版本、漏洞 根据扫描结果&#xff0c;在80端口可能有CSRF漏洞&#xff0c;…

关于目标检测任务中,YOLO(txt格式)标注文件的可视化

1. 前言 本文是针对yolo标注格式txt文件的可视化脚本介绍 如果是VOC格式的xml文件&#xff0c;参考&#xff1a;关于目标检测任务中&#xff0c;XML(voc格式)标注文件的可视化 代码比较简单&#xff0c; 50行这样 。。。。 下面是代码的目录结构&#xff0c;1.jpeg 是数据…

Jenkins接口调用

Jenkins是好用&#xff0c;但是接口文档写的稀烂 1、授权&#xff0c;Jenkins不推荐使用创建单个任务时创建的token&#xff0c;推荐这个用户下的创建user token。 点击自己账号信息&#xff0c;即可创建token。 2、postman选择basic auth&#xff0c;输入账号密码&#xff0…

有网友希望我推荐几个创建产品手册工具,这不就来了!

上次我有说到&#xff0c;企业应该充分认识到产品手册的重要性&#xff0c;并采取有效的策略和措施来制作和传播高质量的产品手册&#xff0c;以提升品牌知名度和市场份额。后台有网友问我除了设计排版的那种产品手册工具&#xff0c;还有什么方式可以去做产品手册。今天就介绍…

力扣题:高精度运算-1.4

力扣题-1.4 [力扣刷题攻略] Re&#xff1a;从零开始的力扣刷题生活 力扣题1&#xff1a;306. 累加数 解题思想&#xff1a;首先先通过secondStart和secondEnd可以确定num1 num[0:secondStart],num2 num[secondStart:secondEnd]&#xff0c;然后遍历secondStart和secondEnd…

鸿蒙系列--动态共享包的依赖与使用

一、前言 HarmonyOS的共享包相当于Android的Library&#xff0c;在HarmonyOS中&#xff0c;给开发者提供了两种共享包&#xff0c;HAR&#xff08;Harmony Archive&#xff09;静态共享包&#xff0c;和HSP&#xff08;Harmony Shared Package&#xff09;动态共享包 区别&…

Android ValueAnimator属性动画ObjectAnimator使View颜色渐变,Kotlin

Android ValueAnimator属性动画ObjectAnimator使View颜色渐变&#xff0c;Kotlin 设置背景颜色渐变&#xff1a; private var iv: ImageView? nulloverride fun onCreate(savedInstanceState: Bundle?) {super.onCreate(savedInstanceState)setContentView(R.layout.activit…