包含许多变量的Jmeter Beanshell采样器的内存限制

时间:2018-07-11 21:29:22

标签: jmeter beanshell

我有一个包含450K行和2列的csv文件。使用CSV数据配置会在某些负载生成器上导致SocketException: Too many open files错误。为了解决这个问题,我使用了一个Beanshell采样器仅读取一次内存中大csv的内容,但是当它尝试保存变量#22,770时,它抛出了java.lang.ArrayIndexOutOfBoundsException: null 这是我的简单代码-

import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
import java.lang.*;

BufferedReader lineReader = null;
try{
    lineReader= new BufferedReader(new FileReader("${skufile}"));
    String line = null;
    int count = 0;
    while ((line = lineReader.readLine()) != null){
        String[] values = line.split(",");
        vars.put("sku_" + count, values[0]);
        vars.put("optionid_" + count, values[1]);
        log.info("Sku# "+ count + " : " +vars.get("sku_"+count));
        count++;
    }
   }catch (Throwable e) {
    log.error("Errror in Beanshell", e);
    throw e;
    }

我尝试过同时使用props和vars。

1 个答案:

答案 0 :(得分:0)

  1. 该错误与任何形式的限制无关,请查看CSV文件的第22771行,它可能不包含逗号,因此您的values[1]变为null
  2. 将文件保存在内存中不是最佳选择,我宁愿建议使用CSV数据集配置和increasing the maximum number of open files,对于大多数普通用户而言,该数据可能低至1024 Linux发行版。步骤是:

    • 将以下行添加到 /etc/security/limits.conf 文件

      your_user_name soft nofile 4096
      your_user_name hard nofile 65536
      
    • 您还可以运行以下命令来提高系统范围的“硬”限制

      ulimit -n 8192
      
  3. 请注意,since JMeter 3.1 it is recommended to use JSR223 Test Elements and Groovy language for scripting。 Groovy不仅与最新的Java语言功能兼容,还在顶部syntax sugar上提供了Groovy has much better performance comparing to Beanshell