Groovy,太多打开文件和withStream闭包

时间:2014-05-05 07:36:50

标签: groovy

当我使用以下代码时出现了意外的'太多打开文件'错误:

new BufferedOutputStream(new FileOutputStream(file)).withStream { os -> 
   try {
       os.write(...)
       os.flush()
   } catch (Exception ex) {
       log.error(...) 
   }
}

我认为withStream假设流应该自动关闭.. 你能告诉我为什么会这样吗?

1 个答案:

答案 0 :(得分:0)

您的操作系统会限制进程在任何给定时间可能具有的打开文件描述符的数量。当您的应用程序超出该限制时,会出现此错误。而且很可能你的流无法自动关闭。我建议您查看哪些文件保持打开状态。

对于Linux:

lsof -p <jvm pid>

对于Windows,您可以尝试一些实用程序,例如Process Explorer

还有一些方法可以增加每进程文件描述符限制。有关UNIX平台,请参阅ulimit