vars.putObject 和 vars.getObject 是否在 jmeter 中消耗了额外的内存

Does vars.putObject and vars.getObject consumes extra memory in jmeter

我有一个测试计划,看起来像

Test plan
  Jsr223 sampler
  {
    def lst = [100 elements];
    vars.putObject("lst",lst);    
  }
  loop controller(100 times)
  {
    Http request
      preprocessor
      {
        lst = vars.getObject("lst");
      }
  }

现在预处理器中的 lst 使用与 jsr223 采样器中的 lst 相同的内存,还是创建新内存并使用。 Q2) 另一个问题是,预处理器中的 lst 内存是否在每次迭代时被清除,或者它是否为每次迭代创建新内存。

在您的设置中,您总是引用位于 JMeterVariables class 实例中的同一个对象,它既不分配新的内存部分,也不在新的迭代期间释放它。

但是请注意,每个 JMeter 线程(虚拟用户) 将在其 local storage 中包含此对象,因此对于 1 个线程,您将拥有 1 个实例,对于 2 个线程- 2 次。

因此,如果您有 > 1 个线程并在所有线程中使用相同的对象 - 最好使用 props 而不是 vars,根据 documentation:

Properties are not the same as variables. Variables are local to a thread; properties are common to all threads

如果您想手动清除对象,请在需要时使用 vars.remove() 函数,例如:

vars.remove('lst')

为了减少内存消耗,您可以考虑将对象放入 CSV 文件中,并跨线程获取 CSV Data Set Config which doesn't load the full file into memory and has flexible sharing options 的值。