Eclipse中CloudSim能否通过Excel/CSV读入数据并将控制台输出存为文本文件?
问题解答
能力支持结论
CloudSim作为纯Java实现的仿真框架,本身没有内置Excel/CSV读取、控制台输出持久化的封装,但完全兼容Java生态的常规实现方案,可支撑10000台VM、50000个异构参数Cloudlet的测试场景,同时能规避main方法字节码超过65535字节限制的报错。
异构数据读取实现
优先选择CSV格式存储测试参数,相比Excel解析性能更高、依赖更轻,十万级数据量读取无压力:
- 可以直接用JDK自带的
BufferedReader逐行解析,也可以引入轻量的CSV解析类库处理。每一行对应一台VM/一个Cloudlet的配置,按列读取存储大小、MIPS、带宽bw、任务长度等异构参数,在循环中传入VM、Cloudlet的构造函数即可生成异构测试对象,彻底解决之前for循环生成同构实例的问题。 - 若必须使用Excel格式存储参数,引入POI类库即可解析,大文件场景使用流式解析模式避免内存溢出即可。
- 该方案下main方法仅保留文件读取、循环实例化的逻辑,不会出现成千上万行硬编码对象创建语句,自然不会触发65535字节的方法长度限制。
参考实现代码:
// 读取CSV生成异构Cloudlet列表示例 List<Cloudlet> cloudletList = new ArrayList<>(); int idCounter = 0; // 注意替换为实际的CSV文件路径 try (BufferedReader reader = new BufferedReader(new FileReader("cloudlet_config.csv"))) { // 跳过CSV表头行 reader.readLine(); String line; while ((line = reader.readLine()) != null) { String[] cols = line.split(","); // 按CSV列顺序解析参数,根据自己的表结构调整索引即可 long length = Long.parseLong(cols[0]); int pesNum = Integer.parseInt(cols[1]); long fileSize = Long.parseLong(cols[2]); long outputSize = Long.parseLong(cols[3]); long reqMips = Long.parseLong(cols[4]); long reqBw = Long.parseLong(cols[5]); long reqStorage = Long.parseLong(cols[6]); UtilizationModel utiModel = new UtilizationModelFull(); Cloudlet cloudlet = new Cloudlet(idCounter++, length, pesNum, fileSize, outputSize, utiModel, utiModel, utiModel); cloudlet.setRequiredBw(reqBw); cloudlet.setRequiredStorage(reqStorage); cloudletList.add(cloudlet); } } catch (IOException e) { e.printStackTrace(); }
VM的读取生成逻辑和上述Cloudlet逻辑完全一致,替换为VM的构造函数即可。
控制台输出保存到文本文件实现
两种方案可选,无需修改CloudSim原有日志逻辑:
- Eclipse可视化配置:右键主类选择
Run As -> Run Configurations,切换到Common选项卡,在Standard Input and Output区域勾选File,选择本地txt文件的保存路径,运行后所有控制台输出会自动同步写入该文件。 - 代码重定向流:在main方法最开头添加如下两行代码,所有打印输出会直接写入指定文件:
// 重定向标准输出和错误输出到文件 System.setOut(new PrintStream(new FileOutputStream("sim_run_output.txt"))); System.setErr(new PrintStream(new FileOutputStream("sim_run_error.log")));
大规模测试优化提示
- 10000台VM+50000个Cloudlet的仿真规模对CloudSim压力很低,在Eclipse运行配置的VM arguments中添加
-Xms2g -Xmx4g设置堆内存,即可避免内存溢出。 - 异构参数可以提前在CSV中按测试需要的分布(均匀分布、正态分布等)生成,无需在代码中硬编码参数值,调整测试场景时直接修改CSV文件即可,不用重新编译代码。
内容的提问来源于stack exchange,提问作者AliviaG
相关产品推荐
相关产品推荐

