Сбои Spring Insight с "Несбалансированным стеком кадров"
Я хочу использовать весеннее понимание, чтобы проследить мой spring mvc
WebApp. При запуске версии для разработчиков 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)
...
После этого сообщения я могу вызвать некоторые действия контроллера, но в какой-то момент сервер просто отказывается обрабатывать мои запросы и отправляет ту же трассировку стека в браузер.
У кого-нибудь был опыт с этой проблемой? Даже деактивация плагинов Insight annotation
, hibernate
, jdbc
или же spring-tx
не совеет проблемы.
2 ответа
Джон Тревис почти прав, но системное свойство
-Dinsight-max-frames
Значение по умолчанию 3000, как видно из insight-intercept-1.5.1.SR2.jar: com.springsource.insight.intercept.trace.FrameBuilder
Изменение значения на -Dinsight-max-frames=6000
исправил проблему для меня.
Часть этого кода была улучшена в последних версиях.
Вы можете попробовать Spring Insight 1.5.1 - он поставляется с tc Server 2.6.1 и доступен по http://springsource.org/insight.
РЕДАКТИРОВАТЬ: проблема, которую вы видите, в том, что одна трассировка попыталась накопить слишком много кадров (по умолчанию он перестает считать на 1000). Это связано с тем, что ваше приложение может выполнять много SQL-вызовов при запуске или множество других инструментальных вызовов. Как только это будет обнаружено, он прекратит сбор кадров и (в настоящее время) получит несбалансированный стек кадров. Ошибка доброкачественная для вашего случая.
Вы можете увеличить максимальное количество кадров, установив sysproperty Java (insight.max.frames).
В bin / setenv.sh просто добавьте в JVM_OPTS:
-Dinsight.max.frames=2000