繁体   English   中英

当前帧的堆栈大小与堆栈映射不匹配

[英]Current frame's stack size doesn't match stackmap

我们正在将 spring 从 4.3.20.Release 升级到 5.3.20,Hibernate 版本为 5.2.3.Final,Java 11 和 Tomcat 9。所有更改都在本地编译并运行良好。 但是当通过 jenkins 部署到服务器时,它们在创建 Bean 期间失败并出现“VerifyError”。

我知道“Xverify:none”选项可以忽略此问题,但想在没有 Xverify:none 解决方案的情况下修复它。

堆栈跟踪:

org.springframework.beans.factory.BeanCreationException: Error creating bean with 
name 'appStatusController': Lookup method resolution failed; nested exception is 
java.lang.IllegalStateException: Failed to introspect Class 
[com.officehours.controller.AppStatusController] from ClassLoader 
[ParallelWebappClassLoader
     context: stage
     delegate: false
       ----------> Parent Classloader:
     java.net.URLClassLoader@2436ea2f] at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor 
     .determineCandidateConstructors(AutowiredAnnotationBeanPostProcessor.java:289)
    ....
    .....
     
  Caused by: java.lang.VerifyError: Inconsistent stackmap frames at branch target 1285
  Exception Details:
  Location:    com/officehours/controller/AppStatusController.appOk(Ljavax/servlet/http/HttpServletRequest;Ljavax/servlet/http/HttpServletResponse;)Lorg/springframework/web/servlet/ModelAndView; @1282: goto

  Reason:
     Current frame's stack size doesn't match stackmap.
  Current Frame:
     bci: @1282
     flags: { }
     locals: { 'com/officehours/controller/AppStatusController', 
           'javax/servlet/http/HttpServletRequest', 
           'javax/servlet/http/HttpServletResponse', 
           'com/newrelic/agent/bridge/ExitTracer', integer, null, top, top, top, top, 
           top, top, 'javax/servlet/http/HttpServletResponse', 
           'javax/servlet/http/HttpServletRequest', 
           'com/officehours/controller/AppStatusController', integer, 
           'org/springframework/web/servlet/ModelAndView', top, top, top, top, top, 
           'java/lang/Throwable', 'javax/servlet/http/HttpServletResponse', 
           'javax/servlet/http/HttpServletRequest', 
           'com/officehours/controller/AppStatusController', 'java/io/File', 
           'java/io/LineNumberReader', top, top, 
           'org/springframework/web/servlet/ModelAndView', 
           'org/springframework/web/servlet/ModelAndView' }
    stack: { 'org/springframework/web/servlet/ModelAndView' }
 Stackmap Frame:
   bci: @1285
   flags: { }
   locals: { 'com/officehours/controller/AppStatusController', 
              'javax/servlet/http/HttpServletRequest', 
               'javax/servlet/http/HttpServletResponse', 
              'com/newrelic/agent/bridge/ExitTracer', integer, null, top, top, top, 
               top, top, top, 'javax/servlet/http/HttpServletResponse', 
               'javax/servlet/http/HttpServletRequest', 
               'com/officehours/controller/AppStatusController', integer, 
               'org/springframework/web/servlet/ModelAndView', top, top, top, top, 
               top, top, 'javax/servlet/http/HttpServletResponse', 
               'javax/servlet/http/HttpServletRequest', 
               'com/officehours/controller/AppStatusController', 'java/io/File', 
               'java/io/LineNumberReader', top, top, 
               'org/springframework/web/servlet/ModelAndView', 
               'org/springframework/web/servlet/ModelAndView' }
    stack: { 'org/springframework/web/servlet/ModelAndView','org/springframework/web/servlet/ModelAndView' }

对此的任何建议将不胜感激,因为这阻碍了我进一步推进其他流程(如生产部署)

最后,我能够找到它的根源。

这个错误是由于代码的双重编织(1 是正常发生的,2 是由于我们使用的 newRelic 检测插件)。 当我们的应用程序使用“AspectJ”并尝试让 spring 版本 > 4.2 时,就会出现这种情况。

当我们比较本地与服务器配置时,我们注意到的唯一区别是 Instrumentation 插件。 我们考虑删除这些检测插件并查看这是否对我们有帮助,当我们删除 newRelic.jar 时,我们注意到该应用程序已启动并与 AspectJ 代码一起运行(没有 Xverify In Place)。

经过检查,它看起来像是 newRelic 的一个长期未解决的问题,他们的团队正在努力识别它https://github.com/newrelic/newrelic-java-agent/issues/347

我们通过修改 newRelic.yml 以包含以下内容从那里实现了 Option-3

class_transformer:
com.newrelic.instrumentation.jax-rs-1.0:
    enabled: false
com.newrelic.instrumentation.spring-4.3.0:
    enabled: false

发布此应用程序已按预期启动并运行。 希望这可以帮助!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM