【问题标题】:Too many open threads error打开的线程太多错误
【发布时间】:2012-05-16 09:18:41
【问题描述】:

我正在使用开放目录项目 (ODP) 中的 URL 实现多线程 Wget。我收到以下错误:

java.io.FileNotFoundException: log (Too many open files)
at java.io.FileOutputStream.openAppend(Native Method)
at java.io.FileOutputStream.<init>(FileOutputStream.java:207)
at java.io.FileOutputStream.<init>(FileOutputStream.java:131)
at java.io.FileWriter.<init>(FileWriter.java:78)
at ODP.run(ODP.java:103)

我读到这是因为它超出了系统变量中指示的打开文件描述符的限制:cat /proc/sys/fs/file-max

有没有办法限制同时启动的线程数?我以为它是根据可以运行 CPU 的线程数自动完成的。

谢谢!

编辑:这是main方法中的主循环:

        while (rs.next ()) {                
            // Process entry
            String rsc = rs.getString ("resource");
            String tpc = rs.getString("topic");             
            (new ODP(rsc, tpc, rs.getString("description"))).start();   
            BufferedWriter outLog = new BufferedWriter(new FileWriter("log", true));
    outLog.write(count + ": " + rsc + " | " + tpc  + "\n");
    outLog.close(); 
            ++count;                
        }

ODP.run() 方法中,我创建了一个 BufferedWritter:

        BufferedWriter out = new BufferedWriter(new FileWriter(cat.split("/")[1] + ".webtrec", true));
        out.write(webtrec);
        out.close();

【问题讨论】:

    标签: java multithreading io


    【解决方案1】:

    在整个问题中,您似乎对 threadsfiles 感到困惑。

    大多数操作系统对给定进程可以打开的文件描述符的数量设置了限制。这包括文件系统上的实际文件,通常还包括诸如数据库或服务器连接之类的套接字。 (这与您的进程中运行的线程数无关。)

    如果您当前拥有最大数量的打开文件句柄,您的进程将无法再打开。这通常是资源泄漏的迹象 - 即您没有正确关闭 I/O 资源。 非常很少,如果您的应用程序合法地需要同时读取数万个文件,您是否需要增加操作系统限制。

    在您的ODP.run 方法中,您是否在循环中创建FileWriters,但未能在它们上调用close()

    【讨论】:

    • 我将如何处理文件写入器的代码放在 ODP.run 方法中。如您所见,我将其关闭。每个线程都会打开一个文件描述符,因此线程数与特定时刻的文件描述符数有关。
    • 我认为如果他产生 10000 个线程并且每个线程运行上面的代码,他也会得到太多文件打开错误。
    【解决方案2】:

    有没有办法限制可以启动的线程数 同一时间?

    是的,通过使用某种线程池。如果您使用的是 Java 1.5 及更高版本,那么您很幸运;您可以使用ThreadPoolExecutor 来限制并发线程的数量。

    【讨论】:

      猜你喜欢
      • 2017-09-21
      • 1970-01-01
      • 2014-06-23
      • 2016-03-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多