Comments 5
Спасибо за труд!
Тут в конце статьи, на секции вопросов и ответов, был задан вопрос:
А в Windows есть что-то подобное?
И я тогда ответил, что нет. Что в Windows нельзя расшить диапазон локальных портов или очередь TCP_TIME_WAIT, настроить переиспользование сокетов. Был тогда не прав. Расширить диапазон портов точно возможно.
Устранение проблем нехватки портов (docs.microsoft.com)
Диапазон динамических портов по умолчанию для TCP/IP
Чтобы соответствовать рекомендациям Service Name and Transport Protocol Port Number Registry, корпорация Майкрософт расширила диапазон портов клиентов для исходящих подключений. Новый диапазон по умолчанию — с 49152 по 65535 (16383 портов). В предыдущих версиях Windows диапазон был с 1025 до 5000 (3975 портов).
В статье по ссылке выше есть команды для задания диапазона портов:
netsh int ipv4 set dynamicport tcp start=10000 num=1000
И инструкции по поиску ошибок в Event log, которые показывают — актуальна ли проблема нехватки портов для станции:
- Event ID 4227
- Event ID 4231
И по возможности Apache.JMeter использовать несколько ip-адресов для отправки HTTP-запросов, как следствие, кратно увеличивать максимальное количество исходящих соединений тоже тогда ошибся.
В старом JMeter еще была такая опция, когда мы могли привязать текущий клиент к определенному IP. И мы могли расширять диапазон IP на клиенте. Таким образом не залазить ни в одну настройку, а просто говорить, что тест сейчас запускается с трех-четырех-пяти адресов. В актуальной версии это удалили. Это как-то можно придумать иначе.
В акутальной версии Apache.JMeter эта возможность есть:
https://jmeter.apache.org/usermanual/component_reference.html#HTTP_Request
На момент доклада изменился интерфейс JMeter, и в новом интерфейсе я эту настройку потерял из вида. Но она осталась.
Source address type
[Only for HTTP Request with HTTPClient implementation]
To distinguish the source address value, select the type of these:
- Select IP/Hostname to use a specific IP address or a (local) hostname
- Select Device to pick the first available address for that interface which this may be either IPv4 or IPv6
- Select Device IPv4 to select the IPv4 address of the device name (like eth0, lo, em0, etc.)
- Select Device IPv6 to select the IPv6 address of the device name (like eth0, lo, em0, etc.)
И есть статьи по ее использованию:
- 2018-01-17 Анастасия Головкова "How to Send JMeter Requests from Different IPs"
- 2015-06-09 Дмитрий Тиханский "Using IP Spoofing to Simulate Requests from Different IP Addresses with JMeter"
Для контекста. Это текстовая расшифровка доклада "Ускоряем Apache.JMeter", который был на конференции Heisenbug 2019 Piter 17-18 мая 2019.
О конференции были статьи от phillennium:
- Heisenbug 2019 Piter: что будет в бесплатной трансляции, а что только на самом мероприятии
- Что запомнилось на прошедшем Heisenbug, и что будет на следующем?
- Один маленький шаг для тестировщика: топ-10 докладов Heisenbug 2019 Piter
Ссылки на материалы по докладу:
- Слайды: https://polarnik.github.io/Apache.JMeter.Benchmark.NG/
- Исходный код проекта тестов: https://github.com/polarnik/Apache.JMeter.Benchmark.NG
- Видео:
Готовил его вместе с Владимиром Ситниковым vladimirsitnikov. Использовал профайлер SJK от Алексея Рагозина. И помогали советами коллеги из Райффайзенбанка: Алексей, Дмитрий, Урал.
Тема не была исчерпана полностью. Еще есть много аспектов разработки быстрых тестов. Много подходов.
А краткая суть доклада — глядя на результаты benchmark-ов инструментов нагрузки, где JMeter или другой инструмент проигрывает одному из фаворитов обзора, помните, что не все так просто, и один и тот же инструмент может выдать как 300 RPS, так и 19 000 RPS, используя и 0 МБайт ОЗУ и 4 ГБайта.
Слава, ты, наверное, самый крутой инженер по нагрузке, из всех, кого я знаю!
Коллеги из Перфоманс Лаб сделали хороший вариант статьи про ускорение JMeter на английском языке:
Вячеслав Смирнов — Ускоряем Apache JMeter