http://stackoverflow.com/questions/6210348/too-many-open-files-error-on-lucene
 
 
 
今天使用lucene的IndexSearcher报这种异常,文件句柄数超多,超过了设置的65535个
 
 
 
问题解决后发现是IndexSearcher.close()并没有真正的关闭,看来这篇文章后知道的
 
 
 
看了看IndexSearcher的close方法,让我汗颜了
 
 
这样写,才是真正的关闭IndexSearcher的reader,获取reader,最后关闭
IndexSearcher.getIndexReader().close()
 
更彻底的IndexSearcher关闭
if (null != indexSearcher) {
     try {
          IndexReader indexReader = indexSearcher.getIndexReader();
          indexReader.close();
          indexReader = null;
         
          indexSearcher.close();
          indexSearcher = null;
     } catch (IOException e) {
          e.printStackTrace();
     }
}
 
 

以后出现这种问题首先仔细检查自己写的代码打开文件是不是没有正确关闭,程序的话就是这种错误,不是的话,就是系统的原因,加大文件句柄打开数量解决

 
IndexSearcherg关闭改进后,发现句柄数还是没有按照预想的使用完后就关闭的流程走,我觉得不只关闭IndexReader、IndexSearcher,看了CSDN - lucene使用教程4 --常用类的对象之IndexSearcher这篇文章后,可能实例化IndexReader的Directory也需要关闭,但我没试,等到了穷途末路的时候再去尝试吧
 
现在解决是加大文件打开句柄数,学dzh的机器,将我们的机器有原来设置的65535改为1006154
变通解决
 
搜索ulimit笔记,有记录设置文件打开数量的做法
 
原以为加大文件打开句柄数就能解决问题,但事实结果是没用,到了穷途末路的时候了,尝试关闭目录
Directory dir = FSDirectory.open(indexDirFile);
IndexReader indexReader = IndexReader.open(dir, true);
dir.close();
 
把目录关闭后,打开的索引文件句柄才是真正的关闭了,真正解决了这个问题
 
有这方面的问题解决,答案确实是关闭reader和directory,调用close方法
 
如果使用了reader的reopen方法,会返回一个新的reader,如果这个reader是最新的,跟你保存你的已实例化好的reader不同的话,建议用新reader并且把旧reader关闭,释放资源(打开文件句柄),用reopen可以提高性能,减少实例化一个新的reader需要的I/O
IndexReader.reopen(true);
 
reopen实战代码:

 
   /*
    * 先获取reader,如果索引文件已经变化,关闭当前indexSearcher,然后以重新获取的indexReader
    * 作为参数new一个新的indexSearcher实例
    */
    IndexReader indexReader=indexSearcher.getIndexReader();//获取当前的indexReader
    if(!indexReader.isCurrent()){//判断是否有索引更新
     
      // 如果有索引更新,先关闭当前的indexSearcher
     indexSearcher.close();
     //利用indexReader.reopen()获取新的indexReader,并作为IndexSearcher的参数创建一个新的indexSearcher
     indexSearcher=new IndexSearcher(indexReader.reopen());
    }
 
 
self:
                              if (!indexReader.isCurrent()) {
                                    try {
//                                        Directory directory = indexReader.directory();
//                                        directory.close();
//                                        directory = null;
                                          indexReader.close();
                                          // indexReader = null;
                                    } catch (Exception e) {
                                          // TODO Auto-generated catch block
                                          e.printStackTrace();
                                    }
 
                                    IndexReader newIndexReader = indexReader.reopen(true);
                                    map.put("IndexReader", newIndexReader);
//                                  if (newIndexReader != indexReader) {
//                                        map.put("IndexReader", newIndexReader);
//                                  } else {
//                                        map.put("IndexReader", indexReader);
//                                  }
                              }
 

 
有关reader的reopen方法详细的介绍
 
 

lucene: IO/FileNotFoundException:(Too many open files) 查询异常解决的更多相关文章

  1. java.io.FileNotFoundException: ***(Too many open files)

    http://yizhilong28.iteye.com/blog/1154098 在linux下跑一个多线程读取文件的程序,待读取文件有数十万个.程序读取过程中抛出如下异常*****(Too man ...

  2. lucene: nDocs must be > 0查询异常解决

    nDocs must be > 0     // 函数search(query,filter,n),其中query是查询条件,filter是过滤器,n查询数量,异常消息意思就是n参数的值必须大于 ...

  3. “System.IO.FileNotFoundException”类型的未经处理的异常在 mscorlib.dll 中发生

    这个错误是我在打包的时候.发现的,由于我移动了我的project的位置(从C盘移动到了D盘),看一下出错的代码: Dim strDB As String = System.Configuration. ...

  4. 报错:java.io.FileNotFoundException: (系统找不到指定的路径。)

    报错如下: java.io.FileNotFoundException: E:\apache-tomcat-8.0.37\webapps\20161028-FileUpLoad\WEB-INF\fil ...

  5. nested exception is java.io.FileNotFoundException: class path resource [spring/spring-datasource-mog

    spring单元測试时发现的问题: org.springframework.beans.factory.BeanDefinitionStoreException: IOException parsin ...

  6. Caused by: java.io.FileNotFoundException

    1.错误描述 usage: java org.apache.catalina.startup.Catalina [ -config {pathname} ] [ -nonaming ] { -help ...

  7. cloudera-scm-server启动时出现Caused by: java.io.FileNotFoundException: /var/lib/cloudera-scm-server/.keystore (No such file or directory)问题解决方法(图文详解)

    不多说,直接上干货! 问题详情 查看/var/log/cloudera-scm-server.log的启动日志 问题来源 我在用cloudermanager安装好之后,然后,在对如下. 配置kerbe ...

  8. SpringBoot 上传文件到linux服务器 异常java.io.FileNotFoundException: /tmp/tomcat.50898……解决方案

    SpringBoot 上传文件到linux服务器报错java.io.FileNotFoundException: /tmp/tomcat.50898-- 报错原因: 解决方法 java.io.IOEx ...

  9. 服务 在初始化安装时发生异常:System.IO.FileNotFoundException: "file:///D:\testService"未能加载文件或程序集。系统找不到指定文件。

    @echo.@if exist "%windir%\Microsoft.NET\Framework\v4.0.30319\InstallUtil.exe" goto INSTALL ...

随机推荐

  1. scrapy模拟请求头

    import random USER_AGENT_LIST=[ 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, lik ...

  2. (24)python 无线破解

    import pywifi import time wifi = pywifi.PyWiFi() # iface = wifi.interfaces()[0]#获取第一块网卡 #print(iface ...

  3. Problem D: 乌龟棋【四维dp】

    Problem D: 乌龟棋 Time Limit: 1 Sec  Memory Limit: 128 MBSubmit: 24  Solved: 15[Submit][Status][Web Boa ...

  4. UVA 839 Not so Mobile (递归建立二叉树)

    题目连接:http://acm.hust.edu.cn/vjudge/problem/19486 给你一个杠杆两端的物体的质量和力臂,如果质量为零,则下面是一个杠杆,判断是否所有杠杆平衡. 分析:递归 ...

  5. Exchange2010启用反垃圾邮件功能

    今天邮箱服务器发现有大量发件人为空的邮件等待执行,也就是说空邮件堵塞了队列. 一般来说,空邮件就是别人发送垃圾邮件给你,你的服务上不存在这个收件人,那么系统会产生一封退信告诉你这封邮件已经被退.而ex ...

  6. 7、Flask实战第7天:Jinjia2模板

    Jinja2模板介绍和查找路径 在前面的章节中,视图只是直接返回文本,然而在实际生产环境中其实很少这样用,因为实际的页面大多带有样式和复杂逻辑的HTML代码,这可以让浏览器其渲染出非常漂亮的页面. 我 ...

  7. HDU 2874 Connections between cities(LCA+并查集)

    [题目链接] http://acm.hdu.edu.cn/showproblem.php?pid=2874 [题目大意] 有n个村庄,m条路,不存在环,有q个询问,问两个村庄是否可达, 如果可达则输出 ...

  8. POJ 2311 Cutting Game (Multi-Nim)

    [题目链接] http://poj.org/problem?id=2311 [题目大意] 给出一张n*m的纸,每次可以在一张纸上面切一刀将其分为两半 谁先切出1*1的小纸片谁就赢了, [题解] 如果切 ...

  9. 【费用流】【Next Array】费用流模板(spfa版)

    #include<cstdio> #include<algorithm> #include<cstring> #include<queue> using ...

  10. 【费马小定理+矩阵快速幂】HDU4549——M斐波那契数列

    [题目大意] M斐波那契数列F[n]是一种整数数列,它的定义如下:F[0] = aF[1] = bF[n] = F[n-1] * F[n-2] ( n > 1 )现在给出a, b, n,求出F[ ...