JVM 经常崩溃
JVM crashes frequently
JVM 在我们的产品环境中意外且频繁地崩溃,导致 Jboss (EAP6.3) 宕机。我们已经 java7 安装了 U72
崩溃日志具有与当前线程相同的输出:
Current thread (0x00000000d1d99000): JavaThread "Lucene Merge Thread #0" daemon [_thread_in_Java, id=1144, stack(0x00000000f6a00000,0x00000000f6b00000)]
并且所有日志都充满了:
JavaThread "elasticsearch[Node BD852E44][search][T#68]" daemon [_thread_blocked, id=14396, stack(0x00000000f7b30000,0x00000000f7c30000)]
elasticsearch 与索引相关,据我所知,它在引擎盖中使用 Lucene,但我们部署了数字或应用程序如何检查这个,有人可以帮忙。完整的崩溃日志位于:http://pastebin.com/845LU9iK
看起来它没有设法记录受影响线程的堆栈跟踪。
如果所有崩溃都是一样的,那么它似乎与已知的 lucene 或 jboss 错误不匹配。
# guarantee(result == EXCEPTION_CONTINUE_EXECUTION) failed: Unexpected result from topLevelExceptionFilter
AIUI 这表明本机异常处理中存在错误,因此这是一个错误掩盖了另一个错误,可能使此崩溃日志变得毫无用处。
所以我只能提供非常通用的建议:
- 您使用的是较旧的 JVM 版本,请更新到最新的 java 7、java 8 甚至可能是 java 9 开发版本,然后查看它是否会消失。
即使它们仍然崩溃,它们也可能会提供 different/more 有用的错误报告
- 要诊断潜在的编译器错误,您可以尝试 运行 以下标志
-XX:-TieredCompilation
1 应该禁用 C1 编译器
-XX:+TieredCompilation -XX:TieredStopAtLevel=1
应该禁用 C2 编译器
-Xint
禁用所有 JIT,非常慢
- 在 hotspot-dev 邮件列表上询问以获得进一步的指导
1: Tiered compilation 是一个新的 java7 特性,它基本上结合了解释器、C1 和 C2 JIT 编译器(以前分别使用在客户端和服务器虚拟机中)进入不同的优化阶段。
他们每个人都可能有优化错误。关闭各个阶段有助于将它们隔离为潜在原因。
编辑:新的崩溃报告更有用,因为它至少有 java 帧,有趣的部分如下:
J 1559 sun.misc.Unsafe.getByte(J)B (0 bytes) @ 0x000000000178e99b [0x000000000178e960+0x3b]
j java.nio.DirectByteBuffer.get()B+11
j org.apache.lucene.store.ByteBufferIndexInput.readByte()B+4
J 9447 C2 org.apache.lucene.store.DataInput.readVInt()I (114 bytes) @ 0x000000000348cc00 [0x000000000348cbc0+0x40]
DataInput.readVInt
似乎是一个持续的悲伤之源,请参阅 this SO answer 了解可能的解决方案
JVM 在我们的产品环境中意外且频繁地崩溃,导致 Jboss (EAP6.3) 宕机。我们已经 java7 安装了 U72
崩溃日志具有与当前线程相同的输出:
Current thread (0x00000000d1d99000): JavaThread "Lucene Merge Thread #0" daemon [_thread_in_Java, id=1144, stack(0x00000000f6a00000,0x00000000f6b00000)]
并且所有日志都充满了:
JavaThread "elasticsearch[Node BD852E44][search][T#68]" daemon [_thread_blocked, id=14396, stack(0x00000000f7b30000,0x00000000f7c30000)]
elasticsearch 与索引相关,据我所知,它在引擎盖中使用 Lucene,但我们部署了数字或应用程序如何检查这个,有人可以帮忙。完整的崩溃日志位于:http://pastebin.com/845LU9iK
看起来它没有设法记录受影响线程的堆栈跟踪。 如果所有崩溃都是一样的,那么它似乎与已知的 lucene 或 jboss 错误不匹配。
# guarantee(result == EXCEPTION_CONTINUE_EXECUTION) failed: Unexpected result from topLevelExceptionFilter
AIUI 这表明本机异常处理中存在错误,因此这是一个错误掩盖了另一个错误,可能使此崩溃日志变得毫无用处。
所以我只能提供非常通用的建议:
- 您使用的是较旧的 JVM 版本,请更新到最新的 java 7、java 8 甚至可能是 java 9 开发版本,然后查看它是否会消失。
即使它们仍然崩溃,它们也可能会提供 different/more 有用的错误报告 - 要诊断潜在的编译器错误,您可以尝试 运行 以下标志
-XX:-TieredCompilation
1 应该禁用 C1 编译器-XX:+TieredCompilation -XX:TieredStopAtLevel=1
应该禁用 C2 编译器-Xint
禁用所有 JIT,非常慢
- 在 hotspot-dev 邮件列表上询问以获得进一步的指导
1: Tiered compilation 是一个新的 java7 特性,它基本上结合了解释器、C1 和 C2 JIT 编译器(以前分别使用在客户端和服务器虚拟机中)进入不同的优化阶段。
他们每个人都可能有优化错误。关闭各个阶段有助于将它们隔离为潜在原因。
编辑:新的崩溃报告更有用,因为它至少有 java 帧,有趣的部分如下:
J 1559 sun.misc.Unsafe.getByte(J)B (0 bytes) @ 0x000000000178e99b [0x000000000178e960+0x3b]
j java.nio.DirectByteBuffer.get()B+11
j org.apache.lucene.store.ByteBufferIndexInput.readByte()B+4
J 9447 C2 org.apache.lucene.store.DataInput.readVInt()I (114 bytes) @ 0x000000000348cc00 [0x000000000348cbc0+0x40]
DataInput.readVInt
似乎是一个持续的悲伤之源,请参阅 this SO answer 了解可能的解决方案