2011-10-11 2 views
8

봄 통찰력을 사용하여 spring mvc 웹 앱을 추적하고 싶습니다. 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)) 

-이 메시지 이후에 어떤 컨트롤러 액션을 호출 할 수 있습니다

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, hibernate, jdbc 또는 spring-tx은 문제가되지 않습니다.

답변

8

Jon Travis가 거의 정확하게 맞아,하지만 시스템 속성은 기본값은 통찰력에서 볼 수 있듯이 3000

-Dinsight-max-frames 

입니다 :

빈/setenv.sh에서, 단지 JVM_OPTS에 추가 -intercept-1.5.1.SR2.jar : com.springsource.insight.intercept.trace.FrameBuilder

값을 -Dinsight-max-frames=6000으로 변경하면 나를 위해 문제가 해결되었습니다.

+0

@ Jon-Travis가 아래 옵션에 언급 한대로 -Dinsite.max가 아닙니다.프레임 – chrislovecnm

+0

@ chrislovecnm 옵션은'-Dinsight-max-frames'입니다. 이것과 존 트래비스가 쓴 것 사이의 아주 미묘한 차이. 도트 대신 대시 (-)를 적어 둡니다. –

8

이 코드 중 일부는 최근 버전에서 개선되었습니다.

당신은 봄 통찰력을 제공 할 수는 시도 1.5.1 - 그것은 TC 서버 2.6.1와 함께 제공 springsource.org/insight

편집을 통해 볼 수 있습니다 : 당신이보고있는이 문제는 하나의 추적을하려고 한 것입니다 너무 많은 프레임을 누적시킵니다 (기본적으로 1000에서 카운팅을 중지합니다). 응용 프로그램이 시작할 때 많은 SQL 호출을 수행하거나 다른 많은 인스트루먼트 호출을 수행 할 수 있기 때문입니다. 이것이 감지되면 프레임 수집을 중단하고 (현재) 불균형 프레임 스택을 얻습니다. 귀하의 경우에는 오류가 발생하지 않습니다.

Java sysproperty (insight.max.frames)를 설정하여 프레임 수를 최대로 늘릴 수 있습니다.

-Dinsight.max.frames=2000 
+0

안녕하세요. 이 힌트를 가져 주셔서 감사합니다. 이제는 응용 프로그램 시작시에만 오류가 발생하지만 한 번만 발생합니다. 이후에는 제한없이 응용 프로그램을 사용할 수 있습니다. 누군가 제게 첫 번째 오류에 대한 이유를 말해 줄 수는 있지만 통찰력을 얻을 수있는 한 모든 것이 좋습니다.) – powerMicha

+0

감사합니다. 자세한 설명을 주셔서 감사합니다. 실제로 우리는 시작시 많은 SQL 호출을 수행합니다. 그러나 insight.max.frames를 50000으로 변경해도 메시지가 수정되지는 않습니다. 나는 어떤 진술이 오류를 일으키고 있는지 알아 내려고 그것들을 최적화하려고 노력할 것이다. – powerMicha

+0

Btw : sysproperty를 변경하면 수집 된 프레임 수에 영향을 미치지 않는 것 같습니다. 위의 메시지를 볼 수 있습니다 : '프레임 스택이 MAX_FRAMES_PER_TRACE 한계를 넘었거나 한계를 넘었습니다 : 3000 frameCount : 3000 aborted : false'는 sysproperty와 함께 변경되지 않습니다 – powerMicha

관련 문제