【发布时间】:2021-08-14 04:11:31
【问题描述】:
在 AWS 上配置 Linux EC2 机器后,我需要运行一个程序。以下代码将出现“打开文件过多”错误。 my_program会打开很多文件,大概5000左右。
string cmd = "my_program";
Process process = new ProcessBuilder()
.inheritIO()
.command(cmd)
.start();
但是,在控制台中运行my_program 可以完成而不会出现任何错误。使用 ProcessBuilder()...start() 运行程序时,ulimit 是什么?
ulimit -n 在 bash 终端中输出 65535。
【问题讨论】:
-
请将
ulimit -n的输出添加到您的问题中(无评论)。 -
ulimit的值不依赖于 Java。它是在您的 Java 程序之外设置的。而且您的 Java 程序无法更改它。因此,您的问题的答案是“我们无法告诉您,但您可以使用ulimit命令自行查找”。 -
为什么需要同时打开所有这些文件?
-
@Cyrus
ulimit -n在终端返回 65535。 -
@chrylis-cautiouslyoptimistic- 它运行一个 pyspark 脚本。 Spark 代码
spark.read.oprtion(...).parquet(*files)会打开很多文件。