调试Jackrabbit Lucene重新索引中止/失败

调试Jackrabbit Lucene重新索引中止/失败,lucene,jackrabbit,crx,Lucene,Jackrabbit,Crx,我正试图在Jackrabbit 2.0实例(实际上是一天的CRX 2.1实例)上重建Lucene搜索索引,以便我可以应用新的属性提升权重进行相关性评分。但是,它在同一点重复中止索引,计数3173000 *信息*多索引:索引/content/xxxxxx/jcr:content(3173000)(MultiIndex.java,第1209行) *信息*RepositoryImpl:正在关闭存储库。。。(RepositoryImpl.java,第1139行) (公司名称已编辑)使CRX web实例显

我正试图在Jackrabbit 2.0实例(实际上是一天的CRX 2.1实例)上重建Lucene搜索索引,以便我可以应用新的属性提升权重进行相关性评分。但是,它在同一点重复中止索引,计数3173000

*信息*多索引:索引/content/xxxxxx/jcr:content(3173000)(MultiIndex.java,第1209行)
*信息*RepositoryImpl:正在关闭存储库。。。(RepositoryImpl.java,第1139行)

(公司名称已编辑)使CRX web实例显示

java.lang.IllegalStateException:存储库不可用

日志中没有显示它为什么会关闭。在任何更高级别的跟踪上,这两条线之间没有更多的线。提到的路径存在并且不显著。Jackrabbit每100个节点记录一次路径,因此可能是下100个节点中的任何一个导致故障

你知道可能出了什么问题,或者我如何调试它吗


(不幸的是,这是我无法回答的问题之一——我不能告诉你更多,因为我不知道该去哪里找。)

谢谢大家在评论中的建议。问题是我们有一些内容的HTML不好:特别是一个
  • ,在
    中是否关闭:

    
    
  • 这会导致StackOverflowerError死亡,它是一个可丢弃的,因此不会被Jackrabbit MultiIndex中的错误处理捕获

    我已经并将提出一个Jackrabbit核心补丁,在索引代码周围添加额外的try/catch,以至少记录出现问题的确切节点,并在可能的情况下从错误中恢复并继续索引。在StackOverflowerError的情况下,我认为这是可以恢复的:当我们回到异常处理代码中时,堆栈已经展开到合理的深度


    实际上,这里不允许我在生产中运行修改过的Jackrabbit,但至少我已经识别并修复了不好的内容,这样同样的问题就不会在那里困扰我们。

    您真的有一个名为/content/xxxxxx/jcr:content的节点吗?那看起来有点可疑。也许尝试删除或重命名该节点?@David不,对不起,是我在编辑日志。那里的真实路径包含公司名称等,并且是存储库中存在的真实路径。这也没什么不寻常的。MultiIndex只记录每100个条目,因此它可能位于导致其失败的下100个节点中的任何位置。我正在重建jackrabbit core,并进行更多的日志记录,我将把它放进去,看看是否还能看到更多的日志-我怀疑有一个异常,它只是无法记录。强制关闭的一个可能原因是系统磁盘空间不足。但是,日志中应该有一条关于这一点的消息。除此之外,我不知道为什么存储库会关闭。除非,如果要求关闭(Ctrl+C,停止使用停止脚本…)。可能是内存不足,或者(更不可能)打开的文件太多了吗?@Thomas谢谢你的建议!磁盘空间:我对此表示怀疑-我们重建的索引最多只有几百MB(绝对不超过1.5GB),并且该分区上的可用空间大于750GB。但我没有看它,因为它失败了。JavaVM有64GB的RAM。太多打开的文件-这很有趣,我没有想到。然而,我让它在周末运行,并额外记录日志,所以明天我可能会在日志中找到答案。
    <html><body><form>
      <select>
        <option value="1"><li></option>
      </select>
    </form></body></html>