我有一个包含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。
答案 0 :(得分:0)
values[1]
变为null
将文件保存在内存中不是最佳选择,我宁愿建议使用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
请注意,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。