簡體   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