2011-10-11 11 views
8

Desidero utilizzare l'analisi di primavera per tracciare la mia app web spring mvc. Quando si avvia il server tc Edition 2.5 sviluppatore, la mia domanda si avvicina ma non vedo seguente messaggio nella console:Approfondimenti di primavera con "Stack di frame non bilanciati"

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

posso chiamare alcune azioni di controllo dopo questo messaggio, ma a un certo punto il server si rifiuta di gestire le mie richieste e invia la stessa traccia di stack al browser.

Qualcuno ha esperienza con questo problema? Anche la disattivazione dei plug-in Insight annotation, hibernate, jdbc o spring-tx non risolve il problema.

risposta

8

Jon Travis è quasi esattamente a destra, ma la proprietà di sistema è

-Dinsight-max-frames 

Il valore di default è 3000 come visto in visione -intercept-1.5.1.SR2.jar: com.springsource.insight.intercept.trace.FrameBuilder

La modifica del valore in -Dinsight-max-frames=6000 ha risolto il problema per me.

+0

come @ Jon-Travis menziona sotto l'opzione non -Dinsite.max.frames – chrislovecnm

+0

@chrislovecnm l'opzione è '-Dinsight-max-frames'. Differenza molto sottile tra questo e ciò che ha scritto @Jon Travis. Nota i trattini invece dei punti. –

8

Alcune di questo codice sono state migliorate nelle versioni recenti.

Si consiglia di dare Spring Insight 1.5.1 una prova - si tratta con tc Server 2.6.1 ed è disponibile tramite springsource.org/insight

EDIT: Il problema che state vedendo è che una singola traccia ha tentato di accumula troppi fotogrammi (di default smette di contare a 1000). Questo perché l'applicazione potrebbe eseguire molte chiamate SQL all'avvio o molte altre chiamate strumentate. Una volta rilevato, smetterà di raccogliere i frame e (attualmente) ottenere uno stack di frame non bilanciato. L'errore è benigno per il tuo caso.

È possibile aumentare il numero di fotogrammi al massimo impostando una proprietà sys Java (insight.max.frames).

In bin/setenv.sh, basta aggiungere alla JVM_OPTS:

-Dinsight.max.frames=2000 
+0

Ciao. Grazie per questo suggerimento. Ora ricevo solo l'errore all'avvio dell'applicazione, ma solo una volta. Successivamente posso lavorare con la mia applicazione senza limitazioni. Forse qualcuno può dirmi un motivo per il primo errore, ma finché riesco a capire meglio, tutto va bene;) – powerMicha

+0

Grazie per la tua spiegazione dettagliata. Effettivamente stiamo facendo molte chiamate SQL all'avvio. Ma anche il passaggio da insight.max.frames a 50000 non risolve il problema. Cercherò di capire quali dichiarazioni stanno causando l'errore e cercare di ottimizzarle. – powerMicha

+0

Btw: la modifica della sysproperty sembra non influire sul numero di frame raccolti. Sopra posso vedere il messaggio: 'Frame stack superato MAX_FRAMES_PER_TRACE limite o è stato interrotto limite: 3000 frameCount: 3000 abortito: false' che non cambia con la sysproperty – powerMicha

Problemi correlati