我编写了一个在windows中运行完美的应用程序,并在unix上抛出此错误。
一般来说,我不明白为什么我会收到这个错误!我创建了一个文件和.append文本。在我添加了几千行后,我收到了这个错误......
任何见解都将受到赞赏。
javadoc中没有列出此内容(打开的文件太多)错误 - http://java.sun.com/j2se/1.4.2/docs/api/java/io/FileNotFoundException.html
这篇文章对我没有帮助...... Too many open files: how many are open, what they are, and how many can the JVM open
提前致谢
答案 0 :(得分:3)
在没有看到您的代码的情况下这是猜测工作,但很可能每次添加时都会创建一个新的FileWriter
或FileOutputStream
对象,但忽略在这些对象上调用close()
,最终导致你用完文件描述符(一个独立于内存的操作系统级资源,因此无法通过垃圾收集进行充分处理,需要手动释放)。
要解决这个问题,要么保留一个Stream / Writer并使用它而不是每次都创建一个新的(这可能会更快),或者每次完成追加时调用close()
答案 1 :(得分:0)
也许你不小心为每个附件打开了一个新的文件句柄?这些限制因操作系统而异。但是如何发布一些代码 - 如果没有看到它就很难猜出是什么问题。
答案 2 :(得分:0)
在linux环境中,这通常带有标志'ulimit'。它基本上处理操作系统级别,您可以一次打开多少个文件。如果您有很多依赖项,那么可能需要加载它们,并且您可以通过这种方式超出最大容量。
尝试在运行应用程序之前将ulimit设置为4096,然后重试。
编辑: 有关详细信息,请参阅http://www.faqs.org/docs/securing/x4733.html