JVM 崩溃问题框架:Canonicalizer::do_If [英] JVM Crash Problematic Frame: Canonicalizer::do_If

查看:12
本文介绍了JVM 崩溃问题框架:Canonicalizer::do_If的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我在启用热部署时始终面临 JVM 崩溃(在启动时使用以下 java 选项 JAVA_OPTS -Xmx4096m -XX:MetaspaceSize=512m -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=crash -XX:ThreadStackSize=512 -XX:+UseConcMarkSweepGC -XX:ParallelGCThreads=5 -XX:NewRatio=2 -XX:+UnlockDiagnosticVMOptions -XX:-UseLoopPredicate -Xdebug -Xrunjdwp:transport=dt_socket,address=$DEBUG_PORT,server=y,suspend=n -XX:NewRatio=2 -Dspringloaded.synchronize=true J​​AVA_OPTS=`echo $JAVA_OPTS -Dspringloaded.synchronize=true -javaagent:springloaded-1.2.1.jar -noverify)

环境:JDK 1.8 U 66,RHEL 6.7

<上一页>## Java 运行时环境检测到一个致命错误:## SIGSEGV (0xb) at pc=0x00007faee9a1e27c, pid=27208, tid=140379827795712## JRE 版本:Java(TM) SE 运行时环境 (8.0_66-b17) (build 1.8.0_66-b17)# Java 虚拟机:Java HotSpot(TM) 64 位服务器虚拟机(25.66-b17 混合模式 linux-amd64)# 有问题的框架:# V [libjvm.so+0x35027c] Canonicalizer::do_If(If*)+0x1c## 核心转储写入.默认位置:core.27208## 包含更多信息的错误报告文件保存为:# hs_err_pid27208.log# [计时器过期,中止...]

解决方案

我注意到 Java 选项列表中有 -javaagent-noverify.

看起来 springloaded 代理生成了无效的字节码,而字节码验证被明确关闭.毫不奇怪,这可能会导致不可预知的结果,包括 JVM 崩溃.

这不是 JVM 问题,但很可能是 springloaded 代理中的错误.尝试删除 -noverify 选项.

-XX:-TieredCompilation 也可以解决这个特定问题,但如果字节码未能通过验证,请不要指望应用程序能够正常工作.最好远离有缺陷的代理库.

Iam facing JVM Crash cosistently while enabling hotdeploy (USING below java options on starting up JAVA_OPTS -Xmx4096m -XX:MetaspaceSize=512m -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=crash -XX:ThreadStackSize=512 -XX:+UseConcMarkSweepGC -XX:ParallelGCThreads=5 -XX:NewRatio=2 -XX:+UnlockDiagnosticVMOptions -XX:-UseLoopPredicate -Xdebug -Xrunjdwp:transport=dt_socket,address=$DEBUG_PORT,server=y,suspend=n -XX:NewRatio=2 -Dspringloaded.synchronize=true JAVA_OPTS=`echo $JAVA_OPTS -Dspringloaded.synchronize=true -javaagent:springloaded-1.2.1.jar -noverify )

Environment : JDK 1.8 U 66, RHEL 6.7


    #
    # A fatal error has been detected by the Java Runtime Environment:
    #
    #  SIGSEGV (0xb) at pc=0x00007faee9a1e27c, pid=27208, tid=140379827795712
    #
    # JRE version: Java(TM) SE Runtime Environment (8.0_66-b17) (build 1.8.0_66-b17)
    # Java VM: Java HotSpot(TM) 64-Bit Server VM (25.66-b17 mixed mode linux-amd64 )
    # Problematic frame:
    # V  [libjvm.so+0x35027c]  Canonicalizer::do_If(If*)+0x1c
    #
    # Core dump written. Default location:  core.27208
    #
    # An error report file with more information is saved as:
    # hs_err_pid27208.log
    # [ timer expired, abort... ]

解决方案

I've noticed both -javaagent and -noverify in Java options list.

It looks like springloaded agent generates invalid bytecode, while the bytecode verification is explicitly turned off. No surprise, this may lead to unpredictable results including JVM crash.

This is not a JVM problem, but most likely a bug in springloaded agent. Try to remove -noverify option.

-XX:-TieredCompilation may also work around this particular problem, but don't expect application to work correctly if the bytecode fails to pass verification. It's better to stay away from the buggy agent libraries.

这篇关于JVM 崩溃问题框架:Canonicalizer::do_If的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆