JMeter 中的 mode 参数详解

JMeter 中的 mode 参数详解

在 JMeter 中,mode 参数控制着采样器结果如何被处理和发送。它主要影响分布式测试中控制机和负载机之间的通信方式,以及本地测试中结果的写入方式。选择合适的 mode 可以显著影响测试的性能和资源消耗。

mode 参数有哪些值?

JMeter 主要有以下四种 mode

  1. StrippedBatch(默认,推荐)

    • 工作方式: 批量发送结果,并移除成功样本的响应数据。
    • 详细解释:
      • 批量发送: JMeter 不会立即发送每个采样器的结果,而是将它们收集在一个批次中(默认 100 个样本或 1 分钟)。当批次达到一定大小或经过一定时间后,才会将整个批次发送出去。
      • 移除响应数据: 对于成功的采样器,只发送必要的统计信息,例如:
        • 采样器名称
        • 开始时间
        • 持续时间(响应时间)
        • 状态码
        • 错误信息(如果发生错误)
      • 配置:
        • jmeter.save.saveservice.batch_size:设置批次大小。
        • jmeter.save.saveservice.autoflush:启用自动刷新(按时间间隔发送批次)。
        • jmeter.save.saveservice.autoflush.interval:设置自动刷新间隔(毫秒)。
    • 优点: 显著减少网络开销和控制机负载,提高测试性能和可扩展性,尤其适合高并发场景。
    • 缺点: 丢失了成功样本的详细响应数据,不方便进行详细的协议分析和调试。
    • 适用场景: 大多数性能测试场景,特别是高负载测试,不需要查看每个请求的完整响应内容时。
  2. Batch

    • 工作方式: 同样使用批量发送结果,但会保留所有采样器的响应数据,包括成功的和失败的。
    • 优点: 保留了所有数据,方便进行详细的协议分析和调试,可以查看每个请求的完整响应内容。
    • 缺点: 网络开销和控制机负载比 StrippedBatch 高,在高并发下可能影响性能。
    • 适用场景: 需要查看每个请求的完整响应内容,例如调试测试脚本、验证响应数据的正确性、进行详细的协议分析等。
  3. Standard(不推荐)

    • 工作方式: 立即发送每个采样器的结果,不进行批处理。
    • 优点: 可以立即获取所有样本数据(但实际上在高负载下反而可能导致数据丢失)。
    • 缺点: 网络开销和控制机负载非常高,在高负载测试中容易成为性能瓶颈,严重影响测试的准确性和可扩展性。
    • 适用场景: 极少数特殊情况,例如测试负载非常低,且需要立即获取所有样本数据的情况。强烈不推荐在高负载测试中使用。
    • 历史原因: 这是 JMeter 2.9 之前的默认模式,现在已经被 StrippedBatch 取代。
  4. Statistical

    • 工作方式: 只发送必要的统计数据,而不是每个单独的样本。它会计算各种统计指标(例如,平均值、最小值、最大值、标准差、百分位数等),并将这些统计数据发送或写入。
    • 优点: 网络开销和控制机负载最低,非常适合生成统计报告,对控制机压力最小。
    • 缺点: 丢失了所有原始样本数据,无法进行详细的分析和调试,无法查看每个请求的详细信息。
    • 适用场景: 需要生成统计报告,但不关心每个单独的请求细节时。通常与 -Jmode=Statistical 命令行参数一起使用。

如何设置 mode

可以通过以下两种方式设置 mode

  1. 修改 jmeter.properties 文件:

    在 JMeter 的 bin 目录下找到 jmeter.properties 文件,找到 mode 属性,修改其值。修改后需要重启 JMeter。例如:

    copy
    mode=Batch
  2. 命令行参数:

    在运行 JMeter 的命令行中使用 -Jmode=<mode> 参数。命令行参数的优先级高于 jmeter.properties 文件中的设置。例如:

    copy
    jmeter -n -t test.jmx -l result.jtl -Jmode=StrippedBatch

总结表格

模式 发送方式 数据内容 优点 缺点 适用场景
StrippedBatch 批量 统计信息 显著减少网络开销和控制机负载,提高测试性能和可扩展性。 丢失成功样本的详细响应数据。 大多数性能测试场景,高负载测试,不需要查看每个请求的完整响应内容时。
Batch 批量 所有数据 保留所有数据,方便进行详细的协议分析和调试。 网络开销和控制机负载比 StrippedBatch 高。 需要查看每个请求的完整响应内容,例如调试测试脚本、验证响应数据的正确性、进行详细的协议分析等。
Standard 立即发送 所有数据 可以立即获取所有样本数据(但高负载下可能导致数据丢失)。 网络开销和控制机负载非常高,高负载测试中容易成为性能瓶颈。 极少数特殊情况,低负载,需要立即获取所有样本数据。强烈不推荐在高负载测试中使用。
Statistical 只发送统计数据 统计结果 网络开销和控制机负载最低,非常适合生成统计报告。 丢失所有原始样本数据,无法进行详细的分析和调试。 需要生成统计报告,不关心每个单独的请求细节时。

最佳实践

  • 默认使用 StrippedBatch
  • 如果需要查看详细的响应数据,使用 Batch
  • 避免使用 Standard
  • 如果只需要统计报告,使用 Statistical

记录和使用 JMeter 的 mode 参数。

posted @   夷某蓁  阅读(28)  评论(0编辑  收藏  举报
相关博文:
点击右上角即可分享
微信分享提示
💬
评论
📌
收藏
💗
关注
👍
推荐
🚀
回顶
收起