Я провожу нагрузочное тестирование API Spring Boot, созданного только для целей сравнительного анализа.
Этот API не выполняет никакой реальной работы — он просто блокирует каждый запрос на 100 мс, а затем возвращает ответ.
Несмотря на это, я нарушаю ограничения пропускной способности и получаю ошибки, которые не могу полностью объяснить.
Среда
- Сервер: macOS (Apple M2), 8 ГБ ОЗУ
Spring Boot 3.x - Java 21
[*]Сеть: Локальная сеть (очень низкая задержка)
Цель теста
- Выполнить 5000 запросов за 10 минут с использованием Vegeta
- Сравнение поведения сервера с использованием:
традиционных потоков - виртуальных потоков (Project Loom)
Наблюдается Поведение
- Я могу обработать только около 3000 запросов за один и тот же 10-минутный интервал.
- Многие запросы завершаются ошибками EOF, например:
: EOF
- Сам API не дает сбоев
- Ограничение, по-видимому, связано с:
Обработкой потоков - Конфигурацией JVM
- Ограничениями встроенного сервера Spring Boot
- Обработкой соединения при постоянной нагрузке
Команда Vegeta
Код: Выделить всё
echo "GET http://192.168.1.16/threads/traditional" | vegeta attack -duration=10m -rate= | vegeta report
- Кто-нибудь сталкивался с ошибками EOF при нагрузочном тестировании API Spring Boot с Vegeta?
- Может ли это быть связано с:
- традиционными и виртуальными потоками
- Соединением ограничения на встроенном сервере (Tomcat/Netty)
- Настройка JVM или уровня ОС?
- Какие изменения (конфигурация Spring Boot, флаги JVM или параметры Vegeta) необходимы для надежного достижения 5000 запросов за 10 минут, учитывая, что каждый запрос блокируется для 100 мс?
- Каковы хорошие способы мониторинга потоков и открытых соединений для выявления фактического узкого места?
Спасибо!
Подробнее здесь: https://stackoverflow.com/questions/798 ... ads-vegeta
Мобильная версия