从JMeter测试计划获取最大并发性并限制其价值

问题描述

我有一个分布式JMeter设置,我想围绕它创建一个Java服务包装器。

测试计划(JMX文件)由用户提供。因此,我不知道其中使用的属性和配置。用户测试计划可以具有多个线程组以及可能的自定义线程组插件,例如Ultimate Thread Group,Arrival Thread Group等。

  1. 我想获得用户测试计划可以实现的总体最大#threads或最大并发性(活动线程)。在执行测试计划之前能否获得该值?这将帮助我为相应的测试配置服务器。

  2. 是否可以限制测试计划实现的总体最大并发性? ({similar就是我们可以使用计时器对RPS进行的操作)(另外,请提及自定义线程组(例如Ultimate线程组)的选项)

解决方法

这不是您可以有效控制的事情,因为:

  1. 可以通过将Throughput Shaping TimerConcurrency Thread Group与反馈功能配合使用,如果当前数量不足以达到/维持目标吞吐量,则可以将JMeter配置为启动额外的线程

  2. 用户可以使用propertiesfunctions/variables来参数化/计算并发性

  3. 用户始终可以使用JSR223 Test Elements并执行类似的操作:

    ctx.getThreadGroup().addNewThread(0,ctx.getEngine()) 
    

    这是您无法检测到的,因为有很多调用此功能的方法,包括reflection

因此,您最多可以依靠JVM限制,到default,每个线程有1 MB的堆栈大小,这为分配给Java的每GB内存提供了1024个线程,因此您可以增加堆栈根据您的“上限”调整大小或减少分配给JVM的内存