Я должен сделать эталонное тестирование сервера HTTPS с помощью Осады, чтобы видеть, как она ведет себя при крупной загрузке. Я - тесты инициирования от другой машины, которая довольно мощна, и она подключена к тому же физическому коммутатору, на котором подключен сервер.
Но когда я инициирую тест, я не могу заставить его выполнять больше чем 170 запросов в секунду. С этой загрузкой использование ЦП сервера в 15-20%, и среднее время отклика для запроса составляет приблизительно 0,03 секунды. Загрузка клиентской машины приблизительно в 10%.
Так, я постепенно увеличиваю число пользователей в Осаде (количество рабочих потоков) и запрашиваю, чтобы уровень линейно увеличил до 170 reqs/sec, но это никогда не преобладает над ним. Неважно, насколько больше рабочих потоков я запускаю, нагрузка на сервер никогда не, чем 20% (и загрузка клиента также больше не увеличивается).
Как я могу преодолеть это?
Я погуглил немного и узнал, что после того, как запрос завершается, сокет, связанный с одним ephermal портом, остается в состоянии WAIT_TIME в течение некоторого времени, во время которого он не может быть снова использован. Я пытался преодолеть это путем выполнения этих вещей:
sysctl -w net.ipv4.ip_local_port_range="1024 65535"
echo 1 > /proc/sys/net/ipv4/tcp_tw_recycle
О, и клиентской машиной является Linux (Redhat, я думаю, но я не уверен). Любая справка ценилась бы.
Оказалось, что проблема связана с сервером, который я тестировал. Спасибо всем, кто хотел помочь.
Рассматривали ли вы другие инструменты, кроме осады? Согласно Open Source Load Testing Tools: Какой из них следует использовать? Tsung и Apache JMeter, похоже, производят более высокую скорость запросов в менее мощных средах.
Продвинутая осада может оказаться недостаточной для создания реалистичного нагрузочного теста, так как забивание одного или нескольких URL-адресов - это не то, что происходит с серверами в реальном мире.