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