У меня есть приложение Sprint Boot API, которое тормозит примерно раз в месяц. Единственный способ исправить это — перезапустить приложение.
Исследование метрик и использования API помогло нам выяснить, что рассылка HTTP-запросов к конкретному контроллеру, которая может привести к выдаче исключения, приводит к тому, что загрузка ЦП не возвращается к нормальному состоянию. Загрузка ЦП постоянно колеблется в пределах 25-35%, когда запросы рассылаются спамом. Точные шаги для воспроизведения:
[*]Выполнить сценарий bash с бесконечным циклом для отправки HTTP-запросов, которые выдают исключение (запустить несколько экземпляров) [*]Подождите, пока сервер достигнет 100 % загрузки процессора. [*]Подождите 15 минут. [*]Остановить бесконечный цикл в скрипте bash
Используя Java Visual, мы можем видеть, что загрузка процессора колеблется около 25%, когда HTTP-запросы прекращаются: введите сюда описание изображения
Мы попробовали несколько вещей, таких как обновление версии весенней загрузки, установка системной переменной LatencyUtils.useActualTime в значение false, выполнение сборки мусора.
Когда мы смотрим на гистограмму кучи, мы видим, что класс с наибольшим количеством экземпляров — io.micrometer.core.instrument.Tag[]: введите сюда описание изображения
Будем благодарны за любые предложения
Загрузка процессора/памяти возвращается к уровням простоя, когда приложение не получает никаких запросов
Мобильная версия