в Java, получая ошибку «Невозможно запустить программу» / bin / sh »: java.io.IOException: error = 24, Слишком много открытых файлов» - PullRequest
1 голос
/ 08 июня 2011

Я использую следующий код для непрерывного запуска сценария оболочки.

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 ]

4 голосов
/ 08 июня 2011

Это может произойти по ряду причин:

  1. Возможно, существует ограничение на количество файлов, которые вам разрешено открывать.Вам может потребоваться увеличить количество открытых файлов, которые вам разрешены в файле /etc/security/limits.conf.

  2. если вы выполняете это непрерывно в цикле, это может привести к задержке большого числа процессов. Возможно, вы захотите int exitValue = p.waitFor() дождаться завершения процесса.

3 голосов
/ 08 июня 2011

попробуйте следующий шаблон и посмотрите, что происходит:

  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
    }
0 голосов
/ 08 июня 2011

Это системная проблема, попробуйте Google. "Linux слишком много открытых файлов" Вы должны увеличить значение, которое указывает, сколько файлов может быть открыто одновременно (в вашей операционной системе) вы, вероятно, найдете что-то вроде "/ proc / sys / fs / file-max"

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...