当前位置: 首页 > news >正文

Go 性能压测工具之wrk介绍与使用

在项目正式上线之前,我们通常需要通过压测来评估当前系统能够支撑的请求量、排查可能存在的隐藏bug;压力测试(压测)是确保系统在高负载情况下仍能稳定运行的重要步骤。通过模拟高并发场景,可以评估系统的性能瓶颈、可靠性和稳定性,进而优化系统架构和资源配置。

文章目录

    • 一、压力测试相关术语
    • 二、安装wrk
      • 2.1 使用Homebrew 安装
      • 2.2 编译安装
      • 2.3 测试是否安装成功
    • 三、wrk 命令基本使用
      • 3.1 常用命令参数
      • 3.2 执行测试
      • 3.3 输出结果

一、压力测试相关术语

  • 响应时间 (RT):指系统对请求作出响应的时间。

  • 吞吐量 (Throughput):指系统在单位时间内处理请求的数量。

  • QPS(每秒查询率,Query Per Second):“每秒查询率”,是一台服务器每秒能够响应的查询次数,是对一个特定的查询服务器在规定时间内所处理流量多少的衡量标准。

  • TPS(Transaction Per Second):每秒钟系统能够处理的交易或事务的数量。

  • 并发连接数:某个时刻服务器所接受的请求总数。

二、安装wrk

2.1 使用Homebrew 安装

brew install wrk

2.2 编译安装

使用Git 下载源码

# 1. 切换到待安装的目录
cd /usr/local/src# 2. 免提示(-y), 安装 git
yum install git -y# 3. 下载 wrk 源码
git clone https://github.com/wg/wrk.git

克隆完成后,进入wrk目录并执行make命令进行编译。这个命令会编译wrk并生成可执行文件:

# 4. 进入安装文件夹
cd wrk# 5. 下载 gcc 编译器, 并编译
yum -y install gcc
make

编译成功后,你会得到一个名为wrk的可执行文件。为了能够在任何目录下运行wrk,你可以将其移动到系统的PATH环境变量中的某个目录,或者直接将wrk的目录添加到PATH环境变量中。如果你不确定如何操作,可以查阅相关的操作系统文档。

在Linux系统中,你可以使用以下命令将wrk添加到PATH环境变量(假设你的当前用户是user):

# 6. 创建软连接, 方便全局调用
ln -s /usr/local/src/wrk/wrk /usr/local/bin

2.3 测试是否安装成功

在使用 wrk 之前,你可以通过 wrk --help 命令来查看所有可用的命令行选项。这个命令会输出 wrk 的使用说明和所有支持的参数。

三、wrk 命令基本使用

3.1 常用命令参数

  • -c, --connections: 每个线程建立的连接数(并发数)。默认值为 200。
  • -d, --duration: 测试持续时间,例如 2s2m2h。默认值为 10 秒。
  • -t, --threads: 用于执行测试的线程数。默认值为 2。
  • -s, --script: 指定一个 Lua 脚本来处理自定义请求或响应。
  • -H, --header: 添加 HTTP 请求头,可以多次使用此参数来添加多个头部。
  • --latency: 打印详细的延迟统计信息。
  • --timeout: 设置请求超时时间,默认为无穷大。
  • --body: 指定请求体,可以是一个文件路径或直接的数据。
  • --rate: 限制请求速率(每秒请求数),默认不限速。

3.2 执行测试

执行如下命令:

wrk -t1 -d1s -c2 -s ./scripts/wrk/signup.lua http://localhost:8080/users/signup

这个命令是使用 wrk 这个 HTTP 压力测试工具来对本地主机上的一个用户注册接口进行测试。下面是命令中每个部分的解释:

  • wrk: 命令的名称,表示执行 wrk 工具。
  • -t1: -t 选项后面跟着的 1 表示使用 1 个线程来进行测试。
  • -d1s: -d 选项后面跟着的 1s 表示测试的持续时间是 1 秒。
  • -c2: -c 选项后面跟着的 2 表示每个线程保持 2 个连接打开。
  • -s ./scripts/wrk/signup.lua: -s 选项后面跟着的路径 ./scripts/wrk/signup.lua 表示加载一个 Lua 脚本,这个脚本用于自定义请求或处理响应。在这个例子中,脚本可能是用来模拟用户注册的请求。
  • http://localhost:8080/users/signup: 这是测试的目标 URL,即本地主机上的用户注册接口,监听在 8080 端口。
    综合来看,这个命令会使用 1 个线程在 1 秒内对 http://localhost:8080/users/signup 接口发起压力测试,每个线程保持 2 个连接,并且使用 ./scripts/wrk/signup.lua 脚本来自定义请求的内容,可能是模拟用户注册的行为。

3.3 输出结果

输出结果如下:

Running 1s test @ http://localhost:8080/users/signup1 threads and 2 connectionsThread Stats   Avg      Stdev     Max   +/- StdevLatency    64.63ms  711.72us  67.28ms   90.00%Req/Sec    29.80     10.76    40.00     80.00%30 requests in 1.01s, 3.78KB read
Requests/sec:     29.81
Transfer/sec:      3.76KB

这个输出是 wrk 执行完压力测试后的统计结果。下面是对每个部分的解释:

  • Running 1s test @ http://localhost:8080/users/signup: 这行显示的是测试的配置,包括测试持续时间(1秒)和测试的目标 URL(本地主机的用户注册接口)。
  • 1 threads and 2 connections: 这行显示的是测试使用的线程数(1个线程)和每个线程建立的连接数(2个连接)。
  • Thread Stats: 这部分显示的是线程级别的统计信息,包括平均延迟、延迟的标准差、最大延迟以及延迟分布在平均值正负一个标准差内的百分比。
    • Avg: 平均延迟,这里是 64.63 毫秒。
    • Stdev: 延迟的标准差,这里是 711.72 微秒。
    • Max: 最大延迟,这里是 67.28 毫秒。
    • +/- Stdev: 延迟分布在平均值正负一个标准差内的百分比,这里是 90.00%。
  • Req/Sec: 这部分显示的是每秒请求数的统计信息,包括平均请求数、请求数的标准差、最大请求数以及请求数分布在平均值正负一个标准差内的百分比。
    • Avg: 平均每秒请求数,这里是 29.80。
    • Stdev: 每秒请求数的标准差,这里是 10.76。
    • Max: 最大每秒请求数,这里是 40.00。
    • +/- Stdev: 每秒请求数分布在平均值正负一个标准差内的百分比,这里是 80.00%。
  • 30 requests in 1.01s, 3.78KB read: 这行显示的是在测试期间总共完成了 30 个请求,耗时 1.01 秒,读取了 3.78KB 的数据。
  • Requests/sec: 这显示的是平均每秒完成的请求数,这里是 29.81。
  • Transfer/sec: 这显示的是平均每秒读取的数据量,这里是 3.76KB。
    总结来说,这个测试在 1 秒内使用 1 个线程和 2 个连接对本地主机的用户注册接口进行了压力测试,平均每秒可以完成大约 29.81 个请求,平均延迟大约为 64.63 毫秒。

相关文章:

Go 性能压测工具之wrk介绍与使用

在项目正式上线之前,我们通常需要通过压测来评估当前系统能够支撑的请求量、排查可能存在的隐藏bug;压力测试(压测)是确保系统在高负载情况下仍能稳定运行的重要步骤。通过模拟高并发场景,可以评估系统的性能瓶颈、可靠…...

数学思想论(有目录)

数学思想是数学发展过程中的重要指导原则,它涉及对数学概念、方法和理论的理解和认识,以及如何利用这些工具来解决实际问题。数学思想的形成和演进是随着数学的发展而逐渐深化的,它体现了人类对数学本质和应用的不断探索和思考。 一些主要的数学思想包括: 函数与方程思想…...

C++的并发世界(五)——线程状态切换

0.线程状态 初始化:该线程正在被创建; 就绪:该线程在列表中就绪,等待CPU调度; 运行:该线程正在运行; 阻塞:该线程被阻塞挂机,Blocked状态包括:pend&#xff…...

C语言——指针

地址是由物理的电线上产生的,能够标识唯一一个内存单元。在C语言中,地址也叫做指针。 在32位机器中,有32根地址线。地址是由32个0/1组成的二进制序列,也就是用4个字节来存储地址。 在64位机器中,有64根地址线。地址是…...

手搓二分查找

第一种: 该种方法是若a[mid]目标数,则让r一直等于mid,让l往右移动,一直移动到rl,这时候跳出循环,在循环外判断 但是不能写成让lmid,让r往左移动,比如a[2]key,这时&#x…...

pycharm调试(步过(Step Over)、单步执行(Step Into)、步入(Step Into)、步出(Step Out))

pycharm调试 pycharm调试 pycharm调试为什么要学会调试?1. 步过 (Step Over)2. 单步执行 (Step Into)3. 步入(Step Into)4. 步出(Step Out) 为什么要学会调试? 调试可以帮助初学者更深入地理解编程基础&am…...

Linux是什么,该如何学习

🐇明明跟你说过:个人主页 🏅个人专栏:《Linux :从菜鸟到飞鸟的逆袭》 🏅 🔖行路有良友,便是天堂🔖 目录 一、引言 1、Linux的起源与发展 2、Linux在现代计算机领域…...

C++ | Leetcode C++题解之第7题整数反转

题目&#xff1a; 题解&#xff1a; class Solution { public:int reverse(int x) {int rev 0;while (x ! 0) {if (rev < INT_MIN / 10 || rev > INT_MAX / 10) {return 0;}int digit x % 10;x / 10;rev rev * 10 digit;}return rev;} };...

Linux------一篇博客了解Linux最常用的指令

&#x1f388;个人主页&#xff1a;靓仔很忙i &#x1f4bb;B 站主页&#xff1a;&#x1f449;B站&#x1f448; &#x1f389;欢迎 &#x1f44d;点赞✍评论⭐收藏 &#x1f917;收录专栏&#xff1a;Linux &#x1f91d;希望本文对您有所裨益&#xff0c;如有不足之处&#…...

vscode安装通义灵码

作为vscode的插件&#xff0c;直接使用 通义灵码-灵动指间&#xff0c;快码加编&#xff0c;你的智能编码助手 通义灵码&#xff0c;是一款基于通义大模型的智能编码辅助工具&#xff0c;提供行级/函数级实时续写、自然语言生成代码、单元测试生成、代码注释生成、代码解释、研…...

RIP协议(路由信息协议)

一、RIP协议概述 RIP协议&#xff08;Routing Information Protocol&#xff0c;路由信息协议&#xff09;是一种基于距离矢量的内部网关协议&#xff0c;即根据跳数来度量路由开销&#xff0c;进行路由选择。 相比于其它路由协议&#xff08;如OSPF、ISIS等&#xff09;&#…...

SpringBoot根据配置类动态加载不同环境下的自定义配置

dev环境配置 Profile({"dev","test"}) PropertySource("classpath:dev.properties") public class DevConfigLoader { }Profile("prod") PropertySource("classpath:prod.properties") public class ProdConfigLoader { }P…...

什么?穷哥们没钱RLHF?跟我一起DPO吧,丐版一样用

本次DPO训练采用TRL的方式来进行训练 Huggingface TRL是一个基于peft的库&#xff0c;它可以让RL步骤变得更灵活、简单&#xff0c;你可以使用这个算法finetune一个模型去生成积极的评论、减少毒性等等。 本次进行DPO的模型是一个500M的GPT-2&#xff0c;目的是训练快&#x…...

【Leetcode笔记】102.二叉树的层序遍历

目录 知识点Leetcode代码&#xff1a;ACM模式代码&#xff1a; 知识点 vector、queue容器的操作 对vector<int> vec;做插入元素操作&#xff1a;vec.push_back(x)。对queue<TreeNode*> que;做插入元素操作&#xff1a;que.push(root);。队列有四个常用的操作&…...

进程的状态

目录 1.操作系统的进程状态 2.Linux系统的进程状态 特殊的进程状态 进程的查看 1.操作系统的进程状态 a.新建&#xff1a;就是新建一个进程 b.运行&#xff1a;PCB结构体在运行队列中排队 c.阻塞&#xff1a;PCB结构体在等待队列中&#xff0c;等待非CPU资源就续 d:挂起…...

spring-boot集成websocket

引入Maven依赖包 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-websocket</artifactId><version>跟随spingboot版本</version> </dependency>后端代码 /*** 开启WebSocket支持*…...

【Python】【Flask】提交表单后报500错误

【背景】 日常用户使用的一个Online的基于Flask做的工具,今天忽然报错,看现象是点击表单提交按钮后发生错误。报500内部错误。 【分析】 用print步步为营接近root cause。 报错对应视图函数的展示部分正常执行。提交表单按钮后的内容全部没有正常执行。 提交表单用的方法是…...

Golang vs Java

目录 前言 一、语言背景与特性 二、性能与效率 三、生态系统与库支持 四、开发体验与工具支持 五、微服务架构设计中的对比 六、总结与建议 前言 在当今的软件开发世界中&#xff0c;选择合适的编程语言对于项目的成功至关重要。GoLang&#xff08;也称为Golang&#x…...

HomePlug AV

目录 HomePlug AV的基本概念基本术语网络概念网络实例 HomePlug AV物理层&#xff08;PHY&#xff09;HomePlug AV OFDM收发器架构PHY的调制模式FC调制和ROBO调制物理层的特点OFDM频域/时域转换开窗/槽式OFDM信号和噪声PHY发送控制——信道自适应PHY帧格式&#xff08;Symbol&a…...

【面试八股总结】超文本传输协议HTTP(二)

参考资料 &#xff1a;小林Coding、阿秀、代码随想录 一、HTTP缓存技术 将资源&#xff08;如网页、图像、脚本等&#xff09;的副本存储在客户端或中间代理服务器上&#xff0c;以便将来的请求可以直接从缓存中获取&#xff0c;而不必重新从服务器下载资源。这有助于减少网…...

【第二十一章 SDIO接口(SDIO)】

第二十一章 SDIO接口 目录 第二十一章 SDIO接口(SDIO) 1 SDIO 主要功能 2 SDIO 总线拓扑 3 SDIO 功能描述 3.1 SDIO 适配器 3.2 SDIOAHB 接口 4 卡功能描述 4.1 卡识别模式 4.2 卡复位 4.3 操作电压范围确认 4.4 卡识别过程 4.5 写数据块 4.6 读数据块 4.7 数据流…...

《基于Apache Flink的流处理》笔记

思维导图 1-3 章 4-7章 8-11 章 参考资料 源码&#xff1a; https://github.com/streaming-with-flink 博客 https://flink.apache.org/bloghttps://www.ververica.com/blog 聚会及会议 https://flink-forward.orghttps://www.meetup.com/topics/apache-flink https://n…...

【论文阅读28】-CNN-BiLSTM-Attention-(2024)

本文把滑坡位移序列拆开、筛优质因子&#xff0c;再用 CNN-BiLSTM-Attention 来动态预测每个子序列&#xff0c;最后重构出总位移&#xff0c;预测效果超越传统模型。 文章目录 1 引言2 方法2.1 位移时间序列加性模型2.2 变分模态分解 (VMD) 具体步骤2.3.1 样本熵&#xff08;S…...

网站指纹识别

网站指纹识别 网站的最基本组成&#xff1a;服务器&#xff08;操作系统&#xff09;、中间件&#xff08;web容器&#xff09;、脚本语言、数据厍 为什么要了解这些&#xff1f;举个例子&#xff1a;发现了一个文件读取漏洞&#xff0c;我们需要读/etc/passwd&#xff0c;如…...

什么是VR全景技术

VR全景技术&#xff0c;全称为虚拟现实全景技术&#xff0c;是通过计算机图像模拟生成三维空间中的虚拟世界&#xff0c;使用户能够在该虚拟世界中进行全方位、无死角的观察和交互的技术。VR全景技术模拟人在真实空间中的视觉体验&#xff0c;结合图文、3D、音视频等多媒体元素…...

深度剖析 DeepSeek 开源模型部署与应用:策略、权衡与未来走向

在人工智能技术呈指数级发展的当下&#xff0c;大模型已然成为推动各行业变革的核心驱动力。DeepSeek 开源模型以其卓越的性能和灵活的开源特性&#xff0c;吸引了众多企业与开发者的目光。如何高效且合理地部署与运用 DeepSeek 模型&#xff0c;成为释放其巨大潜力的关键所在&…...

Mac flutter环境搭建

一、下载flutter sdk 制作 Android 应用 | Flutter 中文文档 - Flutter 中文开发者网站 - Flutter 1、查看mac电脑处理器选择sdk 2、解压 unzip ~/Downloads/flutter_macos_arm64_3.32.2-stable.zip \ -d ~/development/ 3、添加环境变量 命令行打开配置环境变量文件 ope…...

算法刷题-回溯

今天给大家分享的还是一道关于dfs回溯的问题&#xff0c;对于这类问题大家还是要多刷和总结&#xff0c;总体难度还是偏大。 对于回溯问题有几个关键点&#xff1a; 1.首先对于这类回溯可以节点可以随机选择的问题&#xff0c;要做mian函数中循环调用dfs&#xff08;i&#x…...

el-amap-bezier-curve运用及线弧度设置

文章目录 简介示例线弧度属性主要弧度相关属性其他相关样式属性完整示例链接简介 ‌el-amap-bezier-curve 是 Vue-Amap 组件库中的一个组件,用于在 高德地图 上绘制贝塞尔曲线。‌ 基本用法属性path定义曲线的路径,可以是多个弧线段的组合。stroke-weight线条的宽度。stroke…...

20250609在荣品的PRO-RK3566开发板的Android13下解决串口可以执行命令但是脚本执行命令异常的问题

20250609在荣品的PRO-RK3566开发板的Android13下解决串口可以执行命令但是脚本执行命令异常的问题 2025/6/9 20:54 缘起&#xff0c;为了跨网段推流&#xff0c;千辛万苦配置好了网络参数。 但是命令iptables -t filter -F tetherctrl_FORWARD可以在调试串口/DEBUG口正确执行。…...