Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/393.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 用户数量增加时Lucene索引中打开的文件过多_Java_Lucene - Fatal编程技术网

Java 用户数量增加时Lucene索引中打开的文件过多

Java 用户数量增加时Lucene索引中打开的文件过多,java,lucene,Java,Lucene,我一直在为我的web应用程序使用Lucene索引和搜索技术。最初,我面临“打开的文件太多”的问题,经过研究,我使用一个针对单个用户的通用索引搜索器解决了这个问题。然后,当我用更多的并发用户测试应用程序时,它再次开始带来“太多打开的文件问题” 我将IndexSearcher对象保留在特定用户的会话中,该对象始终保持几个文件处于打开状态(他们当前正在使用这些文件)。即使有任何数量的用户,是否有人能帮助解决这个问题 如果我不清楚上述解释中的任何地方,请告诉我。Lucene的常见问题解答有一个答案 简言

我一直在为我的web应用程序使用Lucene索引和搜索技术。最初,我面临“打开的文件太多”的问题,经过研究,我使用一个针对单个用户的通用索引搜索器解决了这个问题。然后,当我用更多的并发用户测试应用程序时,它再次开始带来“太多打开的文件问题”

我将IndexSearcher对象保留在特定用户的会话中,该对象始终保持几个文件处于打开状态(他们当前正在使用这些文件)。即使有任何数量的用户,是否有人能帮助解决这个问题

如果我不清楚上述解释中的任何地方,请告诉我。

Lucene的常见问题解答有一个答案

简言之:

  • 检查所有Lucene IndexReader、IndexWriter和IndexSearcher是否正确关闭
  • 尝试使用复合文件,这会限制创建的文件数量
  • 增加操作系统上打开的文件句柄的限制

我不久前在Lucene上也遇到过类似的问题,当你有很多并发用户时,这个限制很容易达到。增加文件句柄限制效果很好。

在应用服务器中使用“Linux”很好。我希望这能奏效。我还有一个问题。。以前,我试着在会话中保持点击率。这也使文件保持打开状态,我放弃了计划。有没有办法在不打开文件的情况下将结果(或点击)保存在会话中?@user1059414将结果复制到自定义对象中,这样您就可以释放Lucene结果对象,但将数据保存在另一种形式。谢谢Vivien。是的,我之前也试过。我创建了自定义对象,将命中的值存储到其中,然后将这些对象打包到单个ArrayList中。我开始在会话中保留此ArrayList。每件事都很顺利,但都开始影响性能。当我获取统计数据时,我发现,从索引检索数据需要4秒,将它们打包到自定义对象的阵列列表几乎需要12秒……如果我正在做这些事情,请建议我。有人请为我提供解决方案:(为什么首先要将结果保留在会话中?尝试将结果保留在请求范围中,即使这意味着重新执行搜索查询以转到搜索结果中的下一页。