为什么会出现这种错误? :java.io.FileNotFoundException:/dir/myfile.txt(太多打开的文件)

时间:2010-03-04 14:32:10

标签: java

我编写了一个在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

提前致谢

3 个答案:

答案 0 :(得分:3)

在没有看到您的代码的情况下这是猜测工作,但很可能每次添加时都会创建一个新的FileWriterFileOutputStream对象,但忽略在这些对象上调用close(),最终导致你用完文件描述符(一个独立于内存的操作系统级资源,因此无法通过垃圾收集进行充分处理,需要手动释放)。

要解决这个问题,要么保留一个Stream / Writer并使用它而不是每次都创建一个新的(这可能会更快),或者每次完成追加时调用close()

答案 1 :(得分:0)

也许你不小心为每个附件打开了一个新的文件句柄?这些限制因操作系统而异。但是如何发布一些代码 - 如果没有看到它就很难猜出是什么问题。

答案 2 :(得分:0)

在linux环境中,这通常带有标志'ulimit'。它基本上处理操作系统级别,您可以一次打开多少个文件。如果您有很多依赖项,那么可能需要加载它们,并且您可以通过这种方式超出最大容量。

尝试在运行应用程序之前将ulimit设置为4096,然后重试。

编辑: 有关详细信息,请参阅http://www.faqs.org/docs/securing/x4733.html