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

wrk(1) command

文章目录

  • 1.简介
  • 2.特点
  • 3.格式
  • 4.选项
  • 5.示例
  • 参考文献

1.简介

wrk 是一个现代的 HTTP 压力测试工具,利用现代多线程技术和高效的网络 I/O 处理,能够生成大量的并发请求,用以测试 HTTP 服务器的性能。

它是作为一种更现代的压力测试工具而设计的,旨在替代旧的工具如 Apache HTTP server benchmarking tool (ab)。

wrk 非常适合于高负载测试和性能分析,能够在保持高并发的同时,提供准确和详细的性能测试结果,包括吞吐率、延迟和错误率等。

wrk 是由 Will Glozer 开发的,并首次发布于 2012 年。

2.特点

wrk 的设计重点是易用性、效率和灵活性。它通过简单的命令行界面提供强大的功能,同时支持 LuaJIT 脚本,让用户能够编写自定义的测试脚本来模拟复杂的请求场景。

wrk具备如下特性:

  • 轻量级性能测试工具,安装简单。

  • 学习成本低。

  • 基于异步事件驱动框架,单机支持高并发。

  • 单机压测工具,无分布式施压能力。

  • 只支持HTTP协议。

  • 无可视化界面,不支持流程编排、断言等能力,无法满足复杂压测需求。

3.格式

wrk 的基本命令格式如下:

wrk [OPTIONS] URL

其中 URL 是必须指定的,表示你想要测试的 HTTP 服务的网址。

4.选项

wrk 提供了多种选项来调整压力测试的各个方面:

-c, --connections N打开的连接总数。
-d, --duration T测试持续时间,例如 2s, 2m, 2h。
-t, --threads	N使用的线程数。
-s, --script FILE指定 Lua 脚本来自定义请求。
-H, --header H添加额外的 HTTP 头到请求中。
--latency打印出详细的延迟统计信息。
--timeout T设置套接字和 HTTP 读取超时时间。
-v, --version打印版本信息

数字参数可能包含 SI 单位(1k、1M、1G)。时间参数可能包含时间单位(2s、2m、2h)。

关于线程数,并不是设置的越大,压测效果越好,线程设置过大,反而会导致线程切换过于频繁,效果降低,一般来说,推荐设置成压测机器 CPU 核心数的 2 倍到 4 倍就行了。

5.示例

(1)GET 请求。

100 个请求分 10 个线程压 10 秒。

wrk -c100 -t10 -d10s --latency http://localhost:5000/test_get

控制台输出:

Running 10s test @ http://localhost:5000/test_get10 threads and 100 connectionsThread Stats   Avg      Stdev     Max   +/- StdevLatency   201.71ms   58.06ms 451.62ms   79.16%Req/Sec    27.94     10.18    70.00     73.70%Latency Distribution50%  196.82ms75%  228.07ms90%  261.79ms99%  394.08ms2817 requests in 10.10s, 473.18KB read
Requests/sec:    278.94
Transfer/sec:     46.86KB

(2)POST 请求。

使用 test_post.lua 脚本。

wrk -c100 -t10 -d10s -s test_post.lua --latency http://localhost:5000/test_post

Lua 脚本:

wrk.method = "POST"
wrk.headers["Content-Type"] = "application/json"
wrk.body = '{"k1":1,"k2":2}'

控制台输出:

Running 10s test @ http://localhost:5000/test_post10 threads and 100 connectionsThread Stats   Avg      Stdev     Max   +/- StdevLatency   188.49ms   60.76ms 352.02ms   67.50%Req/Sec    38.35     23.71   101.00     67.22%Latency Distribution50%  182.22ms75%  230.92ms90%  272.66ms99%  325.02ms3665 requests in 10.10s, 604.87KB read
Requests/sec:    362.77
Transfer/sec:     59.87KB

注:GET 请求同样可以使用 Lua 脚本。


参考文献

wg/wrk: Modern HTTP benchmarking tool
不同性能压测工具对比_性能测试(PTS) - 阿里云文档
性能测试工具wrk 使用教程- 犬小哈
wrk 性能测试工具详解 - 掘金

http://www.lryc.cn/news/449743.html

相关文章:

  • 【小程序 - 大智慧】Expareser 组件渲染框架
  • vue + echarts 快速入门
  • 服务器几核几G几M是什么意思?如何选择?
  • K8S服务发布
  • Allen Institute for Artificial Intelligence (Ai2) 发布开源多模态语言模型 Molmo
  • Html CSS 布局,位置处理 居中 对齐
  • Spring MVC系统学习(二)——Spring MVC的核心类和注解
  • conda虚拟环境安装包、依赖同一管理
  • Unity网络开发记录(四):在unity中进一步封装客户端类
  • Linux内核中的UART驱动-详解Linux内核UART驱动:结构与功能分析
  • 威胁检测与防范:如何及时、准确对抗安全风险
  • 数据结构串的kmp相关(求next和nextval)
  • 创建游戏暂停菜单
  • seata服务端部署
  • 理解Python闭包概念
  • 51单片机的教室智能照明系统【proteus仿真+程序+报告+原理图+演示视频】
  • 一款资产进行快速存活验证工具
  • I/O中断处理过程
  • 关于PHP 匿名函数在处理数据结构中的应用
  • 安卓13默认使用大鼠标 与配置分析 andriod13默认使用大鼠标 与配置分析
  • AI学习指南深度学习篇-批标准化在深度学习中的应用
  • 了解网络的相关信息
  • Java | Leetcode Java题解之第447题回旋镖的数量
  • Docker实践与应用举例
  • 828华为云征文 | 智能监控新篇章,Prometheus如何在华为云Flexusx容器环境中大展身手
  • 基于单片机的可调式中文电子日历系统
  • 《C++设计新思维-泛型编程与设计模式之应用》阅读记录
  • vue访问组件的数据和方法
  • Redis: RDB与AOF的选择和容灾备份以及Redis数据持久化的优化方案
  • Goweb---Gorm操作数据库(二)