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 的值。
我有一个测试计划,看起来像
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 的值。