【问题标题】:in java,getting error "Cannot run program "/bin/sh": java.io.IOException: error=24, Too many open files"在 java 中,出现错误“无法运行程序“/bin/sh”:java.io.IOException:错误=24,打开的文件太多”
【发布时间】:2011-06-08 14:49:23
【问题描述】:

我正在使用以下代码连续运行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.

如何避免这个问题。

【问题讨论】:

    标签: java shell


    【解决方案1】:

    发生这种情况的原因有很多:

    1. 您可以打开的文件数量可能存在限制。您可能需要提高 /etc/security/limits.conf 文件中允许打开的文件的数量。

    2. 如果您在循环中连续运行,则可能会导致大量进程的生成。您可能希望int exitValue = p.waitFor() 等待进程完成。

    【讨论】:

    • 流程构建器每次执行完成后如何停止或关闭?.这样是否可以避免这种情况?
    【解决方案2】:

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

      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
        }
    

    【讨论】:

    • 在上述方法中,我们应该如何处理rc值?
    【解决方案3】:

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

    【讨论】:

    • -1。 “尝试谷歌”不是一个建设性的答案。此外,JVM 正在泄漏资源。增加 file-max 只会延迟问题,但不能解决问题。
    猜你喜欢
    • 2014-09-21
    • 1970-01-01
    • 2012-07-05
    • 2013-02-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-08-23
    • 1970-01-01
    相关资源
    最近更新 更多