调整 Apache Jmeter 以增加请求吞吐量

Tuning Apache Jmeter for Increased Request Throughput

我目前需要使用每秒发出 400 个请求的 apache Jmeter 执行测试。为了实现这一点,我将一个恒定吞吐量计时器配置为每分钟 12000 个请求(对当前线程组中的所有线程都有效),并从两个测试服务器执行测试,每个服务器都有 32G 内存。

测试 运行 总计 400tps 的速度很好,持续了大约 15/20 分钟(我试图让 运行 超过一个小时),此时吞吐量下降 - 坐在 280测试完成时的 tps。

在测试 运行 时,我可以考虑任何调整参数或注意事项吗?我在我的 jmeter.bat 文件中包含了堆大小的示例。

set HEAP=-Xms1024m -Xmx25600m
set NEW=-XX:NewSize=2048m -XX:MaxNewSize=2048m
set SURVIVOR=-XX:SurvivorRatio=6 -XX:TargetSurvivorRatio=50%
set TENURING=-XX:MaxTenuringThreshold=2
set GC=-XX:+UseConcMarkSweepGC
rem Java 8 remove Permanent generation, don't settings the PermSize
if %current_minor% LEQ "8" (
    rem Increase MaxPermSize if you use a lot of Javascript in your Test Plan :
    set PERM=-XX:PermSize=64m -XX:MaxPermSize=128m
)

我正在使用 Jmeter 3.1 版。值得注意的是,有大量 javascript 用于促进对发出特定请求的线程百分比的限制。有相当数量的 beanshell 运行ning 和一些 Groovy。

感谢任何帮助,快速 google 似乎并没有解决这个问题。

编辑:包括测试吞吐量图 HERE

  1. 尝试切换到 Groovy from JavaScript and Beanshell, as per JMeter Best Practices:

    Since JMeter 3.1, we advise switching from BeanShell to JSR223 Test Elements (see JSR223 section below for more details), and switching from __Beanshell function to __groovy function.

  2. 运行 你的测试使用 profiler 工具遥测,至少 JVisualVM or better something like YourKit 看看什么是最耗资源的 类,最大的对象,GC 表现如何

  3. 尝试切换到 G1 Garbage Collector,例如:

    -XX:+UseG1GC -XX:MaxGCPauseMillis=100 -XX:G1ReservePercent=20
    

    应该是个好的开始

  4. 考虑使用 Weighted Switch Controller 进行工作负载分配,因为 Java 解决方案在任何情况下在性能和资源消耗方面都优于任何脚本选项。