在java中,获取错误“无法运行程序”/ bin / sh“:java.io.IOException:error = 24,打开文件过多”

时间:2011-06-08 06:28:35

标签: java shell

我使用以下代码连续运行shell脚本。

String[] process = new String[] {"/bin/sh", "-c","pgrep httpd" };
Process proc = new ProcessBuilder(process).start();
InputStreamReader input = new InputStreamReader(proc
        .getInputStream());
BufferedReader reader = new BufferedReader(input);
String line = reader.readLine();
reader.close();
input.close();

在线程中运行此代码时,我收到错误消息

MESSAGE: Too many open files
java.net.SocketException: Too many open files

Cannot run program "/bin/sh": java.io.IOException: error=24, Too many open files.

如何避免此问题。

3 个答案:

答案 0 :(得分:4)

这可能由于多种原因而发生:

  1. 允许打开的文件数量可能有限制。您可能需要在/etc/security/limits.conf文件中增加允许的打开文件数。

  2. 如果你在一个循环中连续运行它,那么它可能会导致大量进程的spwanning。你可能希望int exitValue = p.waitFor()等待进程完成。

答案 1 :(得分:3)

尝试以下模式,看看它发生了什么:

  try {

        String[] process = new String[]{"/bin/sh", "-c", "pgrep httpd"};
        Process proc = new ProcessBuilder(process).start();
        InputStreamReader input = new InputStreamReader(proc.getInputStream());
        BufferedReader reader = new BufferedReader(input);
        String line = reader.readLine();

        int rc = proc.waitFor();

        reader.close();
        input.close();

    } catch (IOException e) {
        e.printStackTrace(); // or log it, or otherwise handle it
    } catch (InterruptedException ie) {
        ie.printStackTrace(); // or log it, or otherwise handle it
    }

答案 2 :(得分:-1)

这是系统问题尝试谷歌。 “linux太多打开的文件” 您必须增加值,该值指定一次可以打开多少文件(在您的操作系统中) 你可能会找到类似“/ proc / sys / fs / file-max”

的东西