jmeter - 保存许多变量的 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;
}
我尝试过同时使用道具和变量。
解决方案
- 该错误与任何形式的限制无关,请查看 CSV 文件的第 22771 行,它可能不包含逗号,因此您的
values[1]
变为null
将文件保存在内存中并不是最好的选择,我宁愿推荐使用 CSV 数据集配置并增加打开文件的最大数量,
1024
这对于大多数 Linux 发行版的普通用户来说可能一样低。步骤是:将下一行添加到/etc/security/limits.conf文件
your_user_name soft nofile 4096 your_user_name hard nofile 65536
您还可以运行以下命令来提高系统范围的“硬”限制
ulimit -n 8192
请注意,从 JMeter 3.1 开始,建议使用 JSR223 测试元素和 Groovy 语言编写脚本。Groovy 不仅兼容最新的 Java 语言特性,而且在顶部提供语法糖,与 Beanshell 相比,Groovy 具有更好的性能。
推荐阅读
- python - 将位置和名称作为参数传递给 reportlab.platypus 中的 SimpleDocTemplate
- kotlin - 密封类扩展了其他密封类
- python - 没有端口转发的 P2P 多人游戏如何工作?
- python - 如何将时间戳转换为 df 到 excel python?
- flutter - 为什么这个 AnimatedSwitcher 不对变化进行动画处理?
- c# - 计算除星期日外 2 天的小时数
- html - 尝试使用固定位置修复导航栏时导航栏位置发生变化
- tcl - Tcl如何对文本中的某些单词进行排序并取最后一个
- publish - 已在 Google 商店发布的应用无法通过 Google Assistant 的声音启动
- c++ - static_assert 计算非常量表达式