Spring洞察力与"不平衡帧堆栈"崩溃

pow*_*cha 8 java spring spring-mvc stack-frame spring-insight

我想使用spring insight来跟踪我的spring mvcwebapp.启动tc服务器2.5开发人员版时,我的应用程序出现了,但我在控制台中看到以下消息:

20.10.2011 09:24:24 com.springsource.insight.intercept.trace.SimpleFrameBuilder enter
FATAL: Frame stack exceeded MAX_FRAMES_PER_TRACE limit or has been aborted limit: 3000 frameCount: 3000 aborted: false
20.10.2011 09:24:24 com.springsource.insight.collection.errorhandling.AdviceErrorHandlingAspect ajc$around$com_springsource_insight_collection_errorhandling_AdviceErrorHandlingAspect$1$e76a6b03
FATAL: Error swallowed in advice adviceexecution(void com.springsource.insight.collection.AbstractOperationCollectionAspect.afterReturning(Object, JoinPoint.StaticPart))
Run Code Online (Sandbox Code Playgroud)

-

java.lang.IllegalStateException: Imbalanced frame stack!  (exit() called too many times)
com.springsource.insight.intercept.trace.ThreadLocalFrameBuilder.exit(ThreadLocalFrameBuilder.java:61)
com.springsource.insight.collection.DefaultOperationCollector.exit(DefaultOperationCollector.java:111)
com.springsource.insight.collection.DefaultOperationCollector.exitNormal(DefaultOperationCollector.java:67)
com.springsource.insight.plugin.springtx.TransactionOperationCollectionAspect.ajc$afterReturning$com_springsource_insight_plugin_springtx_TransactionOperationCollectionAspect$2$e13fb3a0(TransactionOperationCollectionAspect.aj:61)
org.springframework.transaction.support.AbstractPlatformTransactionManager.commit(AbstractPlatformTransactionManager.java:724)
org.springframework.transaction.interceptor.TransactionAspectSupport.commitTransactionAfterReturning(TransactionAspectSupport.java:393)
org.springframework.transaction.aspectj.AbstractTransactionAspect.ajc$afterReturning$org_springframework_transaction_aspectj_AbstractTransactionAspect$3$2a73e96c(AbstractTransactionAspect.aj:78)
...
Run Code Online (Sandbox Code Playgroud)

我可以在此消息之后调用一些控制器操作,但在某些时候服务器只是拒绝处理我的请求并将相同的堆栈跟踪发送到浏览器.

有没有人有这个问题的经验?即使停用洞察力插件annotation,hibernate,jdbcspring-tx不SOVE问题.

Jon*_*vis 8

在最近的版本中,一些代码已得到改进.

您可能想尝试一下Spring Insight 1.5.1 - 它附带了tc Server 2.6.1,可以通过springsource.org/insight获得

编辑:您看到的问题是单个Trace尝试累积太多帧(默认情况下它停止计数为1000).这是因为您的应用程序可能在启动时执行了大量SQL调用,或者执行了许多其他检测调用.一旦检测到这种情况,它将停止收集帧并(当前)获得不平衡的帧堆栈.错误对您的情况是良性的.

您可以通过设置Java sysproperty(insight.max.frames)将帧数增加到最大值.

在bin/setenv.sh中,只需添加到JVM_OPTS:

-Dinsight.max.frames=2000
Run Code Online (Sandbox Code Playgroud)


Bra*_*pit 8

Jon Travis几乎完全正确,但系统属性是

-Dinsight-max-frames
Run Code Online (Sandbox Code Playgroud)

默认值为3000,如insight-intercept-1.5.1.SR2.jar:com.springsource.insight.intercept.trace.FrameBuilder中所示.

更改值以-Dinsight-max-frames=6000解决我的问题.