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 毫秒。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

在云端遇见雨云:一位服务器寻觅者的指南

引言:寻觅一座云端归宿 当我踏入数字世界的边缘,带着对网络的探索与期待,我迫切需要一座安全可靠的数字栖息地。云计算技术正如一场魔法般的变革,而在这片广袤的云端中,雨云就像是一位友善的向导,引领我穿越…

(C)1005 继续(3n+1)猜想

1005 继续(3n1)猜想: 问题描述 卡拉兹(Callatz)猜想已经在1001中给出了描述。在这个题目里,情况稍微有些复杂。 当我们验证卡拉兹猜想的时候,为了避免重复计算,可以记录下递推过程中遇到的每一个数。例如对 n3 进行验证的时候&a…

30.多个线程交替执行

线程一输出a,5次; 线程二输出b,5次; 线程三输出c,5次; 现在要求输出abcabcabcabcabc怎么实现? 采用wait和notifyAll实现 public class ThreadTest {public static void main(String[] args) {WaitNotify waitNotify new Wai…

3DGS实时高质量大规模场景渲染最新SOTA!

作者:小柠檬 | 来源:3DCV 在公众号「3DCV」后台,回复「原论文」可获取论文pdf 添加微信:dddvision,备注:3D高斯,拉你入群。文末附行业细分群 详细内容请关注3DCV 3D视觉精品课程:…

文字识别 Optical Character Recognition,OCR CTC STN

文字识别 Optical Character Recognition,OCR 自然场景文本检测识别技术综述 将图片上的文字内容,智能识别成为可编辑的文本。 场景文字识别(Scene Text Recognition,STR) OCR(Optical Character Recognition, 光学字符识别)传统上指对输入扫描文档图像进行分析处理,识…

【Java EE】Maven jar 包下载失败问题的解决方法

文章目录 1. 配置好国内的Maven源1.1配置当前项⽬setting1.2设置新项⽬的setting 2.重新下载jar包3.其他问题⭕总结 1. 配置好国内的Maven源 因为中央仓库在国外, 所以下载起来会⽐较慢, 所以咱们选择借助国内⼀些公开的远程仓库来下载资源 接下来介绍, 如何设置国内源 1.1配…

【JAVAEE学习】探究Java中多线程的使用和重点及考点

˃͈꒵˂͈꒱ write in front ꒰˃͈꒵˂͈꒱ ʕ̯•͡˔•̯᷅ʔ大家好,我是xiaoxie.希望你看完之后,有不足之处请多多谅解,让我们一起共同进步૮₍❀ᴗ͈ . ᴗ͈ აxiaoxieʕ̯•͡˔•̯᷅ʔ—CSDN博客 本文由xiaoxieʕ̯•͡˔•̯᷅ʔ 原创 CSDN 如…

Java基数排序知识点(含面试大厂题和源码)

基数排序(Radix Sort)是一种非比较型整数排序算法,其原理是将整数按位数切割成不同的数字,然后按每个位数分别比较。它通过从最低位(个位)开始排序,然后逐渐转向最高位,对每一位进行…

Arcgis研究区图经纬度(南北)切换为英文字体(SN)

只在做英文论文研究区图的时候用,平常为了方便还是切换为中文

MySQL中 in 和 exists 区别

在MySQL中,IN和EXISTS都是用于在子查询中测试条件的操作符,但它们在处理和效率上有一些重要的区别。MySQL中的in语句是把外表和内表作hash连接,⽽exists语句是对外表作loop循环,每次loop循环再对内表进⾏查询。⼤家⼀直认为exists…

面试题:JVM 调优

一、JVM 参数设置 1. tomcat 的设置 vm 参数 修改 TOMCAT_HOME/bin/catalina.sh 文件,如下图 JAVA_OPTS"-Xms512m -Xmx1024m" 2. springboot 项目 jar 文件启动 通常在linux系统下直接加参数启动springboot项目 nohup java -Xms512m -Xmx1024m -jar…

作业3:计算机体系结构属性优选

作业3:计算机体系结构属性优选 一. 单选题(共11题,55分) (单选题)下列哪个选项属于非线性结构( )? A. 线性表 B. 栈 C. 树 D. 队列 正确答案: C:树; (单选题) 浮点数在机器中的表示形式如下所…

运行sentinel Java环境不是8以及端口被占用如何运行

1.Java环境不是8 运行sentinel (没有耐心直接看第三点) java --add-opens java.base/java.langALL-UNNAMED -jar sentinel-dashboard-1.8.1.jar2.8080端口被使用 运行 sentinel java -jar -Dserver.port8090 sentinel-dashboard-1.8.1.jar3.8080端口占用和Java环境不是8 运行…

JS详解-fetch核心语法

document.querySelector(.btn).addEventListener(click,async () > {const p new URLSearchParams({pname:浙江省,cname:杭州市})//1、如何请求?默认为get,参数1 url地址,返回promiseconst res await fetch(http://hmajax.itheima.net/…

给你一个网站如何测试?

主要围绕,功能,页面 UI ,兼容,性能,安全,这几个方面去聊,首先是制定测试计划,确定测试范围和测试策略,一般包括以下几个部分:功能性测试;界面测试…

【打印SQL执行日志】⭐️Mybatis-Plus通过配置在控制台打印执行日志

目录 前言 一、Mybatis-Plus 开启日志的方式 二、测试 三、日志分析 章末 前言 小伙伴们大家好,相信大家平时在处理问题时都有各自的方式,最常用以及最好用的感觉还是断点调试,但是涉及到操作数据库的执行时,默认的话在控制台…

Comfyui插件CLIPSeg应该如何安装

✨背景 GitHub - biegert/ComfyUI-CLIPSeg: ComfyUI CLIPSeg Comfyui-CLIPSeg是一个相对没那么大众的插件,在基于语义分割和自动抠图方面,还是比较实用的一个插件。但是插件安装起来,跟普通的插件安装有亿点不一样,所以很多小朋友…

pipx和conda

pipx pipx是一个用于安装和运行Python应用的工具,它可以为每个安装的应用创建独立的虚拟环境,从而避免依赖冲突和污染全局环境。以下是一些常见的pipx用法: 安装pipx 首先,确保你已经安装了pipx。如果还没有安装,可…

excel中文本列显示e+17这样的科学计数法如何处理

我的excel中文本列显示e17这样的科学计数法 然后右键,设置单元格格式,为特殊,邮政编码,点确定即可 最后效果如下

全网最强JavaWeb笔记 | 万字长文爆肝JavaWeb开发——day05_SpringBootWeb请求响应

万字长文爆肝黑马程序员2023最新版JavaWeb教程。这套教程打破常规,不再局限于过时的老套JavaWeb技术,而是与时俱进,运用的都是企业中流行的前沿技术。笔者认真跟着这个教程,再一次认真学习一遍JavaWeb教程,温故而知新&…