У меня есть приложение Spring Cloud Gateway (реактивная Netty), которое работает на нескольких виртуальных машинах GCP GCE. Средняя скорость трафика составляет 500 tps на виртуальную машину. После нескольких недель бесперебойной работы
память gc young распределяла 10-кратные всплески с одной минуты на другую случайным образом на всех виртуальных машинах в течение нескольких часов. Через некоторое время после всплеска выделения памяти (от минут до часов) происходит серьезное снижение производительности: время ответа сервера (spring.cloud.gateway.requests) и время внутренних вызовов (http.client.requests) увеличивается до 20 раз по сравнению с обычными значениями. . Загрузка ЦП умеренно увеличивается примерно с 10% до 25%. Использование памяти также умеренно увеличивается с 43% до 54%. Перезапуск приложения решает проблему. Одна и та же проблема возникла дважды за 7 месяцев.
Среда:
- Версия Java: 21
- Версия Spring Cloud Gateway: 4.1.5
- Версия Netty: 1.1.21
- Настройки JVM GC: та же проблема возникла с G1 и параллельный.
- Трафик/Полезная нагрузка: стабильный трафик и размер полезной нагрузки.
Наблюденные аномальные показатели:
- jvm/gc/memory/allocated: увеличение в 10 раз при том же трафике и
полезной нагрузке. Это первый признак проблемы.
- reactor/netty/bytebuf/allocator/active/direct/memory: от 100 КБ до
7 МБ.
- reactor/netty/eventloop/pending/tasks: увеличено с 0/1 до более
300.
- reactor/netty/http/client/address/resolver: увеличено с 2 мс до 500 мс.
- reactor/netty/http/client/tls/handshake/time: время увеличено с 5 мс до
1500 мс.
- jvm/threads/states: количество заблокированных потоков увеличивается с 0 до 80.
- TCP-соединения: число активных соединений увеличено с 20 до 300.
Я пытался воспроизвести эту проблему с тех пор, как она впервые возникла, но безуспешно. Я также просмотрел все метрики, попробовал поискать что-нибудь связанное в Интернете, прочитал все, что смог найти о сборщике мусора и утечках памяти в Spring Boot/Spring Cloud Gateway/Netty, спросил чатгпт и барда, но мне не удалось решить эту проблему. тайна.
Любые идеи и предложения приветствуются!
Подробнее здесь:
https://stackoverflow.com/questions/790 ... allocation