searchusermenu
  • 发布文章
  • 消息中心
点赞
收藏
评论
分享
原创

轻松掌握 wrk:性能测试神器指南

2024-11-29 09:12:00
145
0

一、wrk 简介

wrk 是一个轻量级但功能强大的 HTTP 性能测试工具,主要用于在单机多核 CPU 环境下对 HTTP 服务进行性能测试。它通过利用系统自带的高性能 I/O 机制(如 epoll、kqueue 等),结合多线程和事件模式,能够产生大量的负载,从而全面评估 HTTP 服务器的性能。它还可通过可选的 LuaJIT 脚本执行 HTTP 请求生成、响应处理和自定义报告。

二、安装步骤

在 Linux 系统下安装步骤如下:
  1. 安装编译工具:
    • sudo yum groupinstall 'Development Tools'
    • sudo yum install -y openssl-devel
  1. 下载 wrk 源码:
    • git clone https://github.com/wg/wrk.git wrk
  1. 进入 wrk 目录并编译:
    • cd wrk:
    • make
  1. 将 wrk 复制到系统路径:
    • sudo cp wrk /usr/local/bin

      三、基本参数说明

      1. -c, --connections <N>:跟服务器建立并保持的 TCP 连接数量。这个参数决定了 wrk 与服务器之间的连接总数,每个线程持有连接数为总连接数除以总线程数。例如,如果设置-c 100和-t 10,那么每个线程大约会有 10 个连接。
      1. -d, --duration <T>:压测时间。可以使用不同的时间单位,如2s表示 2 秒,2m表示 2 分钟,2h表示 2 小时。通过设置合适的压测时间,可以全面评估服务器在不同时间段内的性能表现。
      1. -t, --threads <N>:使用多少个线程进行压测。线程数的设置需要根据系统资源和测试需求进行调整。一般来说,线程数不宜过多,通常为 CPU 核数的 2 到 4 倍较为合适,过多的线程可能会因为线程切换过多而导致效率降低。
      1. -s, --script <S>:指定 Lua 脚本路径。通过 Lua 脚本,可以实现更复杂的测试场景,例如模拟不同类型的请求(GET、POST、PUT 等),携带不同的请求参数和请求体,以及处理响应数据等。
      1. -H, --header <H>:为每一个 HTTP 请求添加 HTTP 头。可以使用这个参数来定制请求头,例如设置-H "User-Agent: wrk"来模拟特定的用户代理。
      1. --latency:在压测结束后,打印延迟统计信息。包括平均响应时间、最大响应时间、不同百分比的延迟分布等。这些信息可以帮助我们了解服务器的响应速度和稳定性。
        1. --timeout <T>:超时时间。如果在这段时间内没有收到响应,则记录超时。超时时间的设置需要根据实际情况进行调整,以确保测试结果的准确性。
      1. 四、简单使用示例

        对测试域名发起压力测试,线程数为 16,模拟 1000 个并发请求,持续 30 秒。可以使用命令wrk -c100 -t16 -d30s
        在这个命令中,-t16表示使用 16 个线程进行压测。每个线程会独立地向目标服务器发送请求,多个线程同时工作可以模拟高并发的场景。
        -c1000表示模拟 100 个并发请求。这意味着在压测过程中,会有 100 个连接同时与服务器进行交互。
        -d30s指定了测试的持续时间为 30 秒。在这 30 秒内,wrk 会持续使用指定的线程数和并发连接数向目标服务器发送请求,并收集各种性能指标的数据。
         

        五、测试结果说明

        Latency(延迟)

        • Avg(平均值):表示在压测过程中,请求的平均响应时间。例如在对百度的测试中,平均响应时间可能为284.06ms。
        • Stdev(标准差):反映数据的离散程度。标准差越大,说明响应时间的波动越大,服务的稳定性可能相对较差。
        • Max(最大值):记录了压测过程中出现的最大响应时间,例如2.00s。
        • +/- Stdev(标准差占比):具体含义不是很明确,但从报告中可以看出它与数据的分布有关,是高斯函数的参数之一。

        Requests/Sec(平均每秒处理的请求数,通常说的 QPS)

        • 反映了服务器在单位时间内处理请求的能力。例如对百度的测试中,QPS 为2390.7,说明百度服务器在每秒能够处理 2390.7 个请求。这个数值越高,表明服务器的处理能力越强。

        Latency Distribution(延迟分布)

        • 以不同的百分比展示请求的响应时间分布情况。例如50% 120.17ms表示 50% 的请求在 120.17ms 内完成响应;75% 357.11ms表示 75% 的请求在 357.11ms 内完成响应;90% 730.79ms表示 90% 的请求在 730.79ms 内完成响应;99% 1.56s表示 99% 的请求在 1.56s 内完成响应。通过这些数据,可以更全面地了解请求响应时间的分布情况,以便评估服务器在不同负载下的性能表现。

        其他指标

        • Socket errors(套接字错误):统计连接错误、读取错误、写入错误和超时错误的数量。例如connect 0, read 138, write 0, timeout 264,表示连接错误为 0 次,读取错误为 138 次,写入错误为 0 次,超时错误为 264 次。这些错误信息可以帮助我们排查服务器在处理请求过程中可能出现的问题。

         

         
         
         
0条评论
作者已关闭评论
晓晓妞
2文章数
0粉丝数
晓晓妞
2 文章 | 0 粉丝
晓晓妞
2文章数
0粉丝数
晓晓妞
2 文章 | 0 粉丝
原创

轻松掌握 wrk:性能测试神器指南

2024-11-29 09:12:00
145
0

一、wrk 简介

wrk 是一个轻量级但功能强大的 HTTP 性能测试工具,主要用于在单机多核 CPU 环境下对 HTTP 服务进行性能测试。它通过利用系统自带的高性能 I/O 机制(如 epoll、kqueue 等),结合多线程和事件模式,能够产生大量的负载,从而全面评估 HTTP 服务器的性能。它还可通过可选的 LuaJIT 脚本执行 HTTP 请求生成、响应处理和自定义报告。

二、安装步骤

在 Linux 系统下安装步骤如下:
  1. 安装编译工具:
    • sudo yum groupinstall 'Development Tools'
    • sudo yum install -y openssl-devel
  1. 下载 wrk 源码:
    • git clone https://github.com/wg/wrk.git wrk
  1. 进入 wrk 目录并编译:
    • cd wrk:
    • make
  1. 将 wrk 复制到系统路径:
    • sudo cp wrk /usr/local/bin

      三、基本参数说明

      1. -c, --connections <N>:跟服务器建立并保持的 TCP 连接数量。这个参数决定了 wrk 与服务器之间的连接总数,每个线程持有连接数为总连接数除以总线程数。例如,如果设置-c 100和-t 10,那么每个线程大约会有 10 个连接。
      1. -d, --duration <T>:压测时间。可以使用不同的时间单位,如2s表示 2 秒,2m表示 2 分钟,2h表示 2 小时。通过设置合适的压测时间,可以全面评估服务器在不同时间段内的性能表现。
      1. -t, --threads <N>:使用多少个线程进行压测。线程数的设置需要根据系统资源和测试需求进行调整。一般来说,线程数不宜过多,通常为 CPU 核数的 2 到 4 倍较为合适,过多的线程可能会因为线程切换过多而导致效率降低。
      1. -s, --script <S>:指定 Lua 脚本路径。通过 Lua 脚本,可以实现更复杂的测试场景,例如模拟不同类型的请求(GET、POST、PUT 等),携带不同的请求参数和请求体,以及处理响应数据等。
      1. -H, --header <H>:为每一个 HTTP 请求添加 HTTP 头。可以使用这个参数来定制请求头,例如设置-H "User-Agent: wrk"来模拟特定的用户代理。
      1. --latency:在压测结束后,打印延迟统计信息。包括平均响应时间、最大响应时间、不同百分比的延迟分布等。这些信息可以帮助我们了解服务器的响应速度和稳定性。
        1. --timeout <T>:超时时间。如果在这段时间内没有收到响应,则记录超时。超时时间的设置需要根据实际情况进行调整,以确保测试结果的准确性。
      1. 四、简单使用示例

        对测试域名发起压力测试,线程数为 16,模拟 1000 个并发请求,持续 30 秒。可以使用命令wrk -c100 -t16 -d30s
        在这个命令中,-t16表示使用 16 个线程进行压测。每个线程会独立地向目标服务器发送请求,多个线程同时工作可以模拟高并发的场景。
        -c1000表示模拟 100 个并发请求。这意味着在压测过程中,会有 100 个连接同时与服务器进行交互。
        -d30s指定了测试的持续时间为 30 秒。在这 30 秒内,wrk 会持续使用指定的线程数和并发连接数向目标服务器发送请求,并收集各种性能指标的数据。
         

        五、测试结果说明

        Latency(延迟)

        • Avg(平均值):表示在压测过程中,请求的平均响应时间。例如在对百度的测试中,平均响应时间可能为284.06ms。
        • Stdev(标准差):反映数据的离散程度。标准差越大,说明响应时间的波动越大,服务的稳定性可能相对较差。
        • Max(最大值):记录了压测过程中出现的最大响应时间,例如2.00s。
        • +/- Stdev(标准差占比):具体含义不是很明确,但从报告中可以看出它与数据的分布有关,是高斯函数的参数之一。

        Requests/Sec(平均每秒处理的请求数,通常说的 QPS)

        • 反映了服务器在单位时间内处理请求的能力。例如对百度的测试中,QPS 为2390.7,说明百度服务器在每秒能够处理 2390.7 个请求。这个数值越高,表明服务器的处理能力越强。

        Latency Distribution(延迟分布)

        • 以不同的百分比展示请求的响应时间分布情况。例如50% 120.17ms表示 50% 的请求在 120.17ms 内完成响应;75% 357.11ms表示 75% 的请求在 357.11ms 内完成响应;90% 730.79ms表示 90% 的请求在 730.79ms 内完成响应;99% 1.56s表示 99% 的请求在 1.56s 内完成响应。通过这些数据,可以更全面地了解请求响应时间的分布情况,以便评估服务器在不同负载下的性能表现。

        其他指标

        • Socket errors(套接字错误):统计连接错误、读取错误、写入错误和超时错误的数量。例如connect 0, read 138, write 0, timeout 264,表示连接错误为 0 次,读取错误为 138 次,写入错误为 0 次,超时错误为 264 次。这些错误信息可以帮助我们排查服务器在处理请求过程中可能出现的问题。

         

         
         
         
文章来自个人专栏
文章 | 订阅
0条评论
作者已关闭评论
作者已关闭评论
0
0