gpt4 book ai didi

java - JVM 在 Lucene DataInput.readVInt 上崩溃

转载 作者:行者123 更新时间:2023-11-29 03:52:14 26 4
gpt4 key购买 nike

我的 JVM (1.6.0_29) 在使用 Lucene 索引文档时经常崩溃。我得到:

#
# A fatal error has been detected by the Java Runtime Environment:
#
# SIGSEGV (0xb) at pc=0x00002b6b196d767c, pid=26417, tid=1183217984
#
# JRE version: 6.0_29-b11
# Java VM: Java HotSpot(TM) 64-Bit Server VM (20.4-b02 mixed mode linux-amd64 compressed oops)
# Problematic frame:
# J org.apache.lucene.store.DataInput.readVInt()I
#
# If you would like to submit a bug report, please visit:
# http://java.sun.com/webapps/bugreport/crash.jsp
#

环境:

JDK:1.6u29(与 1.6_02 相同的问题)Lucene 版本 3.4.0

vm_info:用于 linux-amd64 JRE (1.6.0_29-b11) 的 Java HotSpot(TM) 64 位服务器 VM (20.4-b02),由“java_re”和 gcc 3.2 于 2011 年 10 月 3 日 01:19:20 构建.2 (SuSE Linux)

操作系统:CentOS 5.0 版(最终版)

jvm_args: -Dcatalina.home=/var/local/tomcat-8081 -Dcatalina.base=/var/local/tomcat-8081 -Djava.io.tmpdir=/var/tmp -Dfile.encoding=UTF-8 -Xmx1024M -XX:MaxPermSize=96m

这似乎是一个在 jdk 1.7 中修复的 jdk 问题,但引入了其他问题。 https://issues.apache.org/jira/browse/LUCENE-3335“自 1.6.0_21(大约 LUCENE-2975)起,Java 7 包含对 readVInt 问题的修复”

那么,我该如何使用 JDK 1.6 解决这个问题呢?我应该升级到 jdk 1.7 吗?

最佳答案

这些 JDK 问题也在 1.6.9_29 中得到修复(不仅是 1.7.0u1)。 ReadVInt 不会再崩溃。因此,您的崩溃与任何“著名的 java6/7 错误”都无关(vint 错误根本不会使您的 JVM 崩溃,它只会通过返回错误的值来破坏您的索引——而且这个错误自 Lucene 3.1 以来肯定已修复)。

但还有另一种可能使 JVM 崩溃:您在 64 位平台 (Linux) 上,因此默认目录实现是 MMapDirectory。 Lucene 使用 hack 来从虚拟地址空间取消映射映射文件。这是 JVM 本身不允许的,但会使取消映射依赖于垃圾收集器,这对 Lucene 来说是一个问题。默认情况下,MMapDirectory 在关闭 IndexInputs 后取消映射文件。 MMapDirectory 根本不同步,因此当另一个线程在取消映射后尝试访问 IndexInput 时,它将访问未映射的地址并将 SIGSEGV。

如果您的代码是正确的,则不会发生这种情况,但看起来您正在使用已经关闭的 IndexReader/IndexWriter 来访问索引。在 Lucene 3.5(即将推出)之前,IndexReader 中缺少检查将导致已经关闭的 IndexReader 及其所有已关闭(且未映射)的 IndexInput 尝试访问索引数据和段错误。

在 3.5 中,我们添加了额外的安全检查来防止这种非法访问,但不是 100%(因为缺少同步)。我会检查代码并检查没有任何内容访问封闭索引。

查看这是否是您的问题的一个简单检查是使用 NIOFSDirectory(在 Linux 上速度较慢)而不是 MMapDirectory。如果它没有崩溃并且可能抛出 AlreadyClosedExceptions,则该错误正在访问已关闭的索引。

关于java - JVM 在 Lucene DataInput.readVInt 上崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8224843/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com