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

鼠扑  金牌会员 | 2024-5-16 02:12:01 | 显示全部楼层 | 阅读模式
打印 上一主题 下一主题

主题 933|帖子 933|积分 2799

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

目录

一、压力测试相干术语


  • 响应时间 (RT):指系统对请求作出响应的时间。
  • 吞吐量 (Throughput):指系统在单元时间内处理请求的数量。
  • QPS(每秒查询率,Query Per Second):“每秒查询率”,是一台服务器每秒可以大概响应的查询次数,是对一个特定的查询服务器在规定时间内所处理流量多少的权衡标准。
  • TPS(Transaction Per Second):每秒钟系统可以大概处理的交易或事务的数量。
  • 并发毗连数:某个时候服务器所接受的请求总数。
二、安装wrk

2.1 利用Homebrew 安装
  1. brew install wrk
复制代码
2.2 编译安装

利用Git 下载源码
  1. # 1. 切换到待安装的目录
  2. cd /usr/local/src
  3. # 2. 免提示(-y), 安装 git
  4. yum install git -y
  5. # 3. 下载 wrk 源码
  6. git clone https://github.com/wg/wrk.git
复制代码
克隆完成后,进入wrk目录并执行make命令进行编译。这个命令会编译wrk并天生可执行文件:
  1. # 4. 进入安装文件夹
  2. cd wrk
  3. # 5. 下载 gcc 编译器, 并编译
  4. yum -y install gcc
  5. make
复制代码
编译乐成后,你会得到一个名为wrk的可执行文件。为了可以大概在任何目录下运行wrk,你可以将其移动到系统的PATH情况变量中的某个目录,或者直接将wrk的目录添加到PATH情况变量中。如果你不确定如何操纵,可以查阅相干的操纵系统文档。
在Linux系统中,你可以利用以下命令将wrk添加到PATH情况变量(假设你的当前用户是user):
  1. # 6. 创建软连接, 方便全局调用
  2. ln -s /usr/local/src/wrk/wrk /usr/local/bin
复制代码
2.3 测试是否安装乐成

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

3.1 常用命令参数


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

执行如下命令:
  1. 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 输出结果

输出结果如下:
  1. Running 1s test @ http://localhost:8080/users/signup
  2.   1 threads and 2 connections
  3.   Thread Stats   Avg      Stdev     Max   +/- Stdev
  4.     Latency    64.63ms  711.72us  67.28ms   90.00%
  5.     Req/Sec    29.80     10.76    40.00     80.00%
  6.   30 requests in 1.01s, 3.78KB read
  7. Requests/sec:     29.81
  8. 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 毫秒。

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

正序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

鼠扑

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表