8

我想使用 spring 洞察力来跟踪我的spring mvcwebapp。启动 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)
...

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

有没有人遇到过这个问题?即使停用洞察插件annotation,hibernatejdbcspring-tx不能解决问题。

4

2 回答 2

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
于 2011-10-11T15:25:48.880 回答
8

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

-Dinsight-max-frames

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

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

于 2012-01-04T23:19:24.250 回答