2011-10-11 14 views
8

Chcę użyć wglądu wiosennego do śledzenia mojej aplikacji internetowej spring mvc. Podczas uruchamiania serwera tc wydanie 2.5 dla programistów, moja aplikacja pojawia się jednak widzę następujący komunikat w konsoli:Wiosenny wgląd wywala się dzięki "stosowi niewyważonych ramek"

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

mogę nazwać pewne działania kontrolera po tej wiadomości, ale w pewnym momencie serwer po prostu odmawia obsługi moich żądań i wysyła ten sam ślad stosu do przeglądarki.

Czy ktoś miał doświadczenie w tym problemie? Nawet dezaktywowanie wtyczek Insight annotation, hibernate, jdbc lub spring-tx nie rozwiązało problemu.

Odpowiedz

8

Jon Travis jest prawie dokładnie rację, ale system jest własnością

-Dinsight-max-frames 

Wartość domyślna to 3000, jak widać na wgląd -intercept-1.5.1.SR2.jar: com.springsource.insight.intercept.trace.FrameBuilder

Zmiana wartości na -Dinsight-max-frames=6000 rozwiązała problem.

+0

, ponieważ @ Jon-Travis wspomina, że ​​opcja nie jest -Dinsite.max.frame – chrislovecnm

+0

@chrislovecnm opcja to '-Dinsight-max-frames'. Bardzo subtelna różnica między tym a tym, co napisał @Jon Travis. Zwróć uwagę na kreski zamiast kropek. –

8

Niektóre z tych kodów zostały ulepszone w najnowszych wersjach.

Możesz dać Wiosna Insight 1.5.1 spróbować - pochodzi z tc Server 2.6.1 i jest dostępny za pośrednictwem springsource.org/insight

EDIT: Problem widzisz to, że pojedyncze nazwiska próbował kumulować zbyt wiele klatek (domyślnie przestaje liczyć przy 1000). Dzieje się tak dlatego, że aplikacja może wykonywać wiele wywołań SQL podczas uruchamiania lub wiele innych wywołań oprzyrządowanych. Gdy zostanie to wykryte, przestanie zbierać ramki i (obecnie) dostanie niezbilansowany stos ramek. Błąd jest łagodny dla twojej sprawy.

Można maksymalnie zwiększyć liczbę klatek, ustawiając właściwość sysproperty języka Java (insight.max.frames).

W bin/setenv.sh, wystarczy dodać do JVM_OPTS:

-Dinsight.max.frames=2000 
+0

Witam. Dziękuję za tę wskazówkę. Teraz pojawia się tylko błąd przy uruchamianiu aplikacji, ale tylko raz. Następnie mogę pracować z moją aplikacją bez żadnych ograniczeń. Może ktoś może mi podać przyczynę pierwszego błędu, ale tak długo, jak mogę ci wglądu wiosennego, wszystko jest w porządku;) – powerMicha

+0

Dzięki za szczegółowe wyjaśnienie. Rzeczywiście podczas uruchamiania uruchamiamy wiele wywołań SQL. Ale nawet zmiana insight.max.frames na 50000 nie naprawia wiadomości. Postaram się dowiedzieć, które stwierdzenia powodują błąd i spróbować je zoptymalizować. – powerMicha

+0

Btw: Zmiana sysproperty wydaje się nie wpływać na liczbę zebranych ramek. Powyżej widzę komunikat: "Stos ramek przekroczył limit MAX_FRAMES_PER_TRACE lub został przekroczony limit: 3000 frameCount: 3000 przerwane: false' które nie zmienia się wraz z sysproperty – powerMicha

Powiązane problemy