2011-10-11 8 views
8

Quiero utilizar Spring Insight para rastrear mi aplicación web spring mvc. Al poner en marcha el servidor tc edición 2.5 desarrollador, mi solicitud viene pero veo siguiente mensaje en la consola:Spring insight se bloquea con "pila de cuadros desequilibrados"

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

puedo llamar a algunas acciones del controlador después de este mensaje, pero en algún momento, el servidor simplemente se niega a manejar mis solicitudes y envía el mismo seguimiento de pila al navegador.

¿Alguien tiene experiencia con este problema? Incluso la desactivación de los complementos de información annotation, hibernate, jdbc o spring-tx no soluciona el problema.

Respuesta

8

Jon Travis es casi exactamente a la derecha, pero la propiedad del sistema es

-Dinsight-max-frames 

El valor por defecto es 3000, como se ve en la visión -intercept-1.5.1.SR2.jar: com.springsource.insight.intercept.trace.FrameBuilder

Al cambiar el valor a -Dinsight-max-frames=6000 solucionó el problema.

+0

como @Jon-Travis menciona debajo de la opción no es -Dinsite.max.marcos – chrislovecnm

+0

@chrislovecnm la opción es '-Dinsight-max-frames'. Diferencia muy sutil entre esto y lo que escribió @Jon Travis. Tenga en cuenta los guiones en lugar de los puntos. –

8

Parte de este código se ha mejorado en versiones recientes.

Es posible que desee dar a la primavera Insight 1.5.1 una oportunidad - que viene con tc servidor 2.6.1 y está disponible a través de springsource.org/insight

EDIT: La cuestión que está viendo es que un solo rastro ha intentado acumular demasiados marcos (por defecto deja de contar en 1000). Esto se debe a que su aplicación puede estar haciendo muchas llamadas SQL al inicio o muchas otras llamadas instrumentadas. Una vez que se detecta esto, dejará de recopilar marcos y (actualmente) obtendrá una pila de cuadros desequilibrada. El error es benigno para tu caso.

Puede aumentar el n. ° de fotogramas al máximo configurando una propiedad sys de Java (insight.max.frames).

En bin/setenv.sh, sólo tiene que añadir a JVM_OPTS:

-Dinsight.max.frames=2000 
+0

Hola. Gracias por esta pista Ahora solo recibo el error al inicio de la aplicación, pero solo una vez. Luego puedo trabajar con mi aplicación sin limitaciones. Tal vez alguien me puede decir una razón para el primer error, pero mientras pueda, la información de la primavera, todo está bien;) – powerMicha

+0

Gracias por su explicación detallada. De hecho, estamos haciendo muchas llamadas SQL al inicio. Pero incluso el cambio de insight.max.frames a 50000 no soluciona el mensaje. Intentaré descubrir qué declaraciones están causando el error e intentaré optimizarlas. – powerMicha

+0

Por cierto: Cambiar la propiedad del sys no parece afectar el número de fotogramas recopilados. Arriba puedo ver el mensaje: 'La pila de cuadros excedió el límite de MAX_FRAMES_PER_TRACE o se ha cancelado. Limit: 3000 frameCount: 3000 aborted: false' que no cambia con sysproperty – powerMicha

Cuestiones relacionadas