Spring иногда выполняет какие-то медленные процессы до и после выполнения метода контроллера?JAVA

Программисты JAVA общаются здесь
Anonymous
Spring иногда выполняет какие-то медленные процессы до и после выполнения метода контроллера?

Сообщение Anonymous »

У меня есть приложение весенней загрузки, работающее в среде k8s.
Когда я проводил несколько тестов, чтобы увидеть, как наше приложение обрабатывает множественные запросы, я заметил, что приложение теряет некоторое время до и после выполнения метода контроллера. В приложении есть несколько фильтров, которые выполняются до и после выполнения метода контроллера, но они не делают ничего серьезного, а просто считывают некоторую информацию из запросов и удаляют некоторые кэшированные строки.
У меня есть настройки трассировки, поэтому я могу отслеживать выполнение определенных частей приложения, в основном внешних вызовов, но в целях тестирования я добавил трассировку в дополнительные части. Корневой диапазон трассировки запускается в фильтре, который находится в верхней части цепочки фильтров.
Вы можете увидеть странное поведение на изображении трассировок ниже.
Красным я отметил диапазоны, которые представляют методы контроллера, черным я отметил диапазоны, которые представляют диапазоны двух последних фильтров, расположенных в конце цепочки фильтров.
На этом изображении
Изображение

Мы видим, что после того, как фильтр taas_tenant_support_check, который является вторым от последнего в цепочке фильтров, завершил свое выполнение, выполнение метода контроллера началось через 50 мс.
И на этом изображении
Изображение

Мы видим, что фильтр taas_remove_bo_user_context, который является последним в цепочке фильтров, был выполнен примерно через 80 мс после завершения выполнения метода контроллера.
Это поведение было зафиксировано только во время работы приложения в среде k8s, на моем локальном компьютере под тем же load (который в настоящее время составляет всего 50 параллельных запросов), этого никогда не происходит.
Под, в котором работает наше приложение, использует максимум 1 ЦП и 2 ГБ памяти.
Я также запускал приложение на своем локальном компьютере внутри контейнера докеров с аналогичными ограничениями ресурсов, но странное поведение не было зафиксировано.
Промежутки трассировки экспортируются пакетами, и этот экспортер работает в отдельном потоке от основного приложения, и я не думайте, что это нас замедляет.
С помощью отладчика я просмотрел исходный код Spring, чтобы увидеть, что происходит до и после выполнения метода контроллера, но я не нашел ничего, что могло бы вызвать такое поведение.
Есть ли у кого-нибудь идеи, что здесь может происходить?

Вернуться в «JAVA»