Приложение Thymeleaf заблокировано на производстве, застряло внутри кода Thymeleaf - PullRequest
0 голосов
/ 26 ноября 2018

Что может вызвать это?Мое веб-приложение зависло и перестало отвечать.Я пошел и сделал дамп потока и нашел несколько потоков, ЗАБЛОКИРОВАННЫХ внутри Thymeleaf:

Thread 3247: (state = BLOCKED)
 - sun.misc.Unsafe.park(boolean, long) @bci=0 (Compiled frame; information may be imprecise)
 - java.util.concurrent.locks.LockSupport.park(java.lang.Object) @bci=14, line=175 (Compiled frame)
 - java.util.concurrent.locks.AbstractQueuedSynchronizer.parkAndCheckInterrupt() @bci=1, line=836 (Interpreted frame)
 - java.util.concurrent.locks.AbstractQueuedSynchronizer.doAcquireSharedInterruptibly(int) @bci=72, line=997 (Interpreted frame)
 - java.util.concurrent.locks.AbstractQueuedSynchronizer.acquireSharedInterruptibly(int) @bci=24, line=1304 (Compiled frame)
 - java.util.concurrent.Semaphore.acquire() @bci=5, line=312 (Compiled frame)
 - org.thymeleaf.util.ResourcePool.allocate() @bci=4, line=108 (Compiled frame)
 - org.thymeleaf.templateparser.xmlsax.AbstractNonValidatingSAXTemplateParser.parseTemplateUsingPool(org.thymeleaf.Configuration, java.lang.String, java.io.Reader, org.thymeleaf.util.ResourcePool) @bci=2, line=124 (Compiled frame)
 - org.thymeleaf.templateparser.xmlsax.AbstractNonValidatingSAXTemplateParser.parseTemplate(org.thymeleaf.Configuration, java.lang.String, java.io.Reader) @bci=8, line=116 (Compiled frame)
 - org.thymeleaf.TemplateRepository.getTemplate(org.thymeleaf.TemplateProcessingParameters) @bci=556, line=278 (Compiled frame)
 - org.thymeleaf.TemplateEngine.process(org.thymeleaf.TemplateProcessingParameters, org.thymeleaf.fragment.IFragmentSpec, java.io.Writer) @bci=11, line=1104 (Compiled frame)
 - org.thymeleaf.TemplateEngine.process(java.lang.String, org.thymeleaf.context.IProcessingContext, org.thymeleaf.fragment.IFragmentSpec, java.io.Writer) @bci=110, line=1060 (Compiled frame)
 - org.thymeleaf.TemplateEngine.process(java.lang.String, org.thymeleaf.context.IContext, org.thymeleaf.fragment.IFragmentSpec, java.io.Writer) @bci=17, line=1011 (Compiled frame)
 - org.thymeleaf.spring4.view.ThymeleafView.renderFragment(org.thymeleaf.fragment.IFragmentSpec, java.util.Map, javax.servlet.http.HttpServletRequest, javax.servlet.http.HttpServletResponse) @bci=590, line=335 (Compiled frame)
 - org.thymeleaf.spring4.view.ThymeleafView.render(java.util.Map, javax.servlet.http.HttpServletRequest, javax.servlet.http.HttpServletResponse) @bci=5, line=190 (Compiled frame)

Что может вызвать это?Код уровня представления не изменился с последней версией приложения.Приложение достаточно зрелое и стабильное.Я не уверен, с чего начать расследование.Приложение повторно развернуто до предыдущей версии, пока я пытаюсь воспроизвести проблему с помощью нагрузочного теста.

Зачем Thymeleaf требуется какой-либо вид блокировки?Кажется, здесь присутствует какой-то фундаментальный архитектурный аспект Thymeleaf, который я не понимаю.

Технически это не может быть "тупиком" по самым строгим определениям, но результат тот же.

1 Ответ

0 голосов
/ 27 ноября 2018

Ответ, как выясняется, заключается в том, что нехватка пространства кучи может вызвать вышеуказанное утверждение.

Дальнейшее исследование (нам не нужно было смотреть слишком далеко) показало, чтоJVM исчерпала пространство кучи из-за чрезмерного усердного кэширования в связанном приложении, которое использует ту же JVM.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...