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

时间:2011-10-11 11:15:19

标签: java spring spring-mvc stackframe spring-insight

我想使用spring insight来跟踪我的spring mvc webapp。启动tc server 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))

-

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)
...

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

有没有人有过这个问题的经验?即使停用洞察插件annotationhibernatejdbcspring-tx也无法解决问题。

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:8)

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

-Dinsight-max-frames

默认值为3000,见于insight-intercept-1.5.1.SR2.jar:com.springsource.insight.intercept.trace.FrameBuilder

将值更改为-Dinsight-max-frames=6000为我解决了问题。