我使用多个文件来执行一些文件I / O(写入19个文件,确实如此)。写他们几百次后,我得到了Java IOException:Too many open files
。但实际上我一次只能打开几个文件。这里有什么问题?我可以验证写入是否成功。
在Linux和其他UNIX /类似UNIX的平台上,操作系统对进程在任何给定时间可能具有的打开文件描述符的数量进行了限制。在过去,此限制曾经是硬接线1,并且相对较小。如今,它要大得多(几百/千),并且受“软”每进程可配置资源限制。(查找ulimit
内置的shell …)
你的Java应用程序必须超过每个进程的文件描述符限制。
你说打开了19个文件,几百次之后,你得到一个IOException消息,说“打开的文件太多”。现在,仅当请求新的文件描述符时,才可能发生这种特殊的异常。即,当你打开文件(或管道或插座)时。你可以通过打印IOException的堆栈跟踪来验证这一点。
除非你的应用程序以很小的资源限制运行(这似乎不太可能),否则它必须重复打开文件/套接字/管道,并且无法关闭它们。找出发生这种情况的原因,你应该能够弄清楚该怎么做。
仅供参考,以下模式是一种写入文件的安全方法,可以确保不会泄漏文件描述符。
Writer w = new FileWriter(...);
try {
// write stuff to the file
} finally {
try {
w.close();
} catch (IOException ex) {
// Log error writing file and bail out.
}
}
1-硬接线,如编译到内核中一样。更改可用fd插槽的数量需要重新编译…并可能导致更少的内存可用于其他用途。在Unix通常在16位计算机上运行的时代,这些事情确实很重要。
更新
Java 7方法更加简洁:
try (Writer w = new FileWriter(...)) {
// write stuff to the file
} // the `w` resource is automatically closed
更新2
显然,在尝试运行外部程序时,你还会遇到“文件打开过多”的问题。基本原因如上所述。但是,遇到这种情况的原因exec(...)
是JVM试图创建“管道”文件描述符,该描述符将连接到外部应用程序的标准输入/输出/错误。
问题内容: 我写了一种测试套件,它占用大量文件。一段时间(2h)之后,我得到了。我仔细检查了所有文件句柄是否再次关闭它们。但是错误仍然存在。 我试图找出使用允许的文件描述符的数量以及当前打开的文件描述符的数量: 因此,如果我运行以下测试: 我得到以下输出: 真奇怪,我期望打开的文件描述符会越来越多。我的脚本正确吗? 我正在使用python的记录器和子进程。那可能是我FD泄漏的原因吗? 谢谢,丹
我们最近在尝试访问Unix服务器中的weblogic控制台时遇到了一个问题,我们将得到: 错误503--服务不可用 在日志文件中,它会指出: 原因:java。io。FileNotFoundException:/opt/weblogic1036/wlserver\u 10.3/server/lib/co 在谷歌上搜索了一番后,我找到了一个解决方案,其中指出/etc/security/limits。c
我有一个错误:PHP无法打开流:打开的文件太多。 我在这里查看了stackoverflow的各种答案,但我无法解决这个问题。我主要尝试增加最大打开文件数的限制: 我已编辑/等/安全/限制。conf,其中我指定了: 保存并注销/重新启动该框后,命令: 仍打印出1024个。我不知道为什么这没有效果,我想这就是我得到php错误的原因。如果需要,我可以粘贴整个文件或任何其他配置文件。我使用的是PHP 5.
今天早些时候,我访问了我最近推出的一个网站,页面上充斥着一个丑陋的jasperex0019:java.io.filenotfoundexception: /opt/tomcat/webapps/root/web-inf/lib/jstl-1.2.jar(打开的文件太多)。我检查了我的服务器日志和tomcat日志,它们充满了相同的错误。我增加了tomcat的最大打开文件限制,作为保持网站运行的临时解
我有一个在tomcat上运行的应用程序,有时会出现以下错误: .... 我检查了打开文件的限制,它是1024个,但是当我检查了lsof应用程序的打开文件数量时,它接近200个,如果它没有达到限制,为什么会发生这种情况?我应该增加限额吗?是否有其他原因导致此错误?让服务重新正常运行的唯一方法是重新启动tomcat,还有其他恢复正常的方法吗? 提前谢谢。 编辑:这里是处理doPost方法的servle
嗨,我收到NEo4J打开文件太多的错误。 2018-11-28 22:24:06.2330000错误[o.n.k.i.a.i.IndexPopulationJob]无法填充索引: [:MPO_TY(modelId)[提供程序:{key=lucene native,version=2.0}]]/opt/neo4j/neo4j-enterprise-3 .4.9/data/databases/grap