Хабр Курсы для всех
РЕКЛАМА
Практикум, Хекслет, SkyPro, авторские курсы — собрали всех и попросили скидки. Осталось выбрать!
И последнее, чтобы выжать максимум rps с любой машины, когда неизвестны какие лимиты по соединениям в данной ОСи или общая текущая нагрузка, надежней всего воспользоваться методом проб и ошибок: задать сначала какое-нибудь запредельное значение, например миллион запросов в секунду и далее ждать на каком количестве соединений начнутся ошибки при создании новых. Опыты показали что предельное количество rps обычно чуть поменьше этой цифры.
Т.е. берем эту цифру за начальное значение rps и потом если ошибки повторяются уменьшаем ее на 10-20%.
Gatling Tool тоже монстр +на scala, это конечно не проблема, но порог вхождения есть: dsl, статистика, гуй, интерграция всего со всем… сомневаюсь что это все добавляет быстродействия к netty, который там внутри.
+опять же если совсем свою логику дергать надо для генерации запроса, которая в коде твоего проекта лежит то как?
Про 1000 сокетов не понял — вы ставите в туле ограничение на 1000 сокетов/потоков и в каждом таком потоке посылаете по таймеру запросы?
while(1) { do_request(); }Кмк, это изначально лучший путь, т.к. у того проекта уже есть community и куча фич, включая требования.
Нет, вообще без таймеров
while(1) { do_request(); }
Но это вроде бы не совсем эмулирует боевую нагрузку: там же каждый раз новые соединения создаются а не старые переиспользуются как у вас.
И сколько максимально rps вам удавалось добиться таким способом? на localhost-е и на удаленный сервер в локальной сетке например?
Как только соединение освобождается, отсылается новый запрос. В итоге 1000 сокетов будет использоваться настолько быстро, насколько быстро отвечает сервер. Так и определим максимальный RPS, который может отдавать сервер.
Вы не поняли. Задача такого теcта «быстро оценить максимальную пропускную способность», чтобы потом уже проводить тесты около неё, эмулируя боевую.
Дело не только в RPSе, дело в протоколе. дело в самой подаче нагрузке даже с обычным таймером. С таймером, у вас запросы идут на сервер с равномерным распределением.
А как в этом бесконечном цикле понять что соединение закрылось? Что-то вроде своего пула сокетов, и как только какой-то освобождается нотифицировать все потоки и посылать в этот сокет?
не совсем так, с равномерным распределением мы коннектимся к серверу, а у ж как только коннект асинхронно отработает — посылаем запрос. Это конечно не Пуассоновское распределение, но вся эта асинхронность тоже вносит определенный элемент случайности.
Не совсем понял вопроса:)
Почитал исходный код. Если вы получаете 30Krps на таком тесте,
Кстати вы его не закрываете;-)
30К может и предел, но получаю я их описанным в посте способом т.е. с использованием таймера, где сокеты тоже переоткрываются естественно. И тогда мне неясно почему Вашим методом я получаю только 10К на той же машине в тех же условиях?
Простой и быстрый фреймворк для стресс-тестирования приложений