我有一个Java的Web应用程序,使用Lucene构build,我不断得到各种“文件已closures”的例外 – 取决于我使用的目录实现。 我已经能够从Lucene中得到“java.io.IOException不良文件描述符”和“java.nio.channels.ClosedChannelException”,通常包含在IndexReader的AlreadyClosedException中。
有趣的是,我还没有closuresIndexReader,似乎文件描述符将自行陈旧。 我正在使用最新版本的Lucene 3.0(没有足够时间升级3.0系列),最新版本的Oracle JDK6,最新版本的Tomcat 6以及最新版本的CentOS。 我可以在其他linux系统上使用相同的软件复制缺陷,但是不能在windows系统上复制缺陷,我没有OSX PC进行testing。 linux服务器是用qEmu虚拟化的,如果可以的话。
这似乎也是负载相关的 – 这种情况发生的频率对应于Tomcat服务的请求数/秒(对于这个特定的web应用程序)。 例如,在一个服务器上,每个请求都按预期完成,直到它处理约2个请求/秒,然后大约10%开始使它们的文件描述符从它们下面closures,中间请求(代码检查有效的IndexReader对象和在处理请求开始时创build一个)。 一旦达到约3 reqs / sec,所有的请求都会由于错误的文件描述符而失败。
我最好的猜测是,某种 *** 作系统级的资源匮乏, *** 作系统正在清理fds …但这只是因为我已经消除了我所有的其他想法。 我已经检查了ulimits和文件系统的fd限制,并且打开的描述符的数量远低于任何限制( sysctl fs.file-nr输出示例:1020 0 203404,ulimit -n:10240)。
Hadoop 2.7.2单节点安装windows 10
BufferedReader.readline()挂起
ConnectException(超时)运行groovy Koans与gradle包装
捕获窗口中的关键笔划
如何从一个.bat脚本单独的窗口启动JAR?
我几乎完全没有办法testing,而且我也没有比解决这个问题更接近解决问题。 有没有人经历类似的事情?
编辑07/12/2011:我发现一台OSX机器用于一些testing,并已确认这发生在OSX上。 我也在物理linux机器上进行了testing,并复制了这个问题,所以我一直无法复制这个问题的唯一 *** 作系统是windows。 我猜这与POSIX处理文件描述符有关,因为这似乎是两个testing系统(JDK版本,tomcat版本和webapp在所有平台上都是相同的)之间唯一的区别。
理解使用二进制补码写入bluej的程序。
使用其名称而不是PID来杀死一个java进程
无效的标题签名; 在Excel文档上使用Apache POI IOException
从Java调用脚本,接收到sigpipe信号
在linux上将MysqL charset更改为UTF8,以便它可以使用JDBC
你可能在windows上看不到这种情况的原因可能是它的FSDirectory.open默认使用SimpleFSDirectory。
请查看FSDirectory和NIOFSDirectory顶部的警告: http ://lucene.apache.org/java/3_3_0/API/core/org/apache/lucene/store/NIOFSDirectory.HTML中的红色文本:
注意:直接或间接从线程访问此类可能会在线程被阻塞的同时立即关闭底层文件描述符。 文件描述符将保持关闭状态,随后访问NIOFSDirectory将引发ClosedChannelException。 如果您的应用程序使用Thread.interrupt()或Future.cancel(布尔),则应该使用SimpleFSDirectory来支持NIOFSDirectory
https://issues.apache.org/jira/browse/LUCENE-2239
总结以上是内存溢出为你收集整理的我的java进程的文件描述符将“坏”,我不知道为什么全部内容,希望文章能够帮你解决我的java进程的文件描述符将“坏”,我不知道为什么所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)