порт активно отклонил запросы

Вопрос или проблема

Я запускаю Mapproxy с waitress на нескольких серверах Windows в различных средах (разное оборудование, VM).
На виртуальном сервере мы сталкиваемся с проблемой, что некоторые запросы к waitress не удаются. Используя K6 для нагрузочного тестирования, выясняется, что если 230 виртуальных пользователей отправляют один запрос одновременно, некоторые запросы завершаются с этой ошибкой:

WARN[0000] Request Failed error="Get \"http://127.0.0.1:9650/tiles/1.0.0/mymap/webmercator/x/x/x.png\": dial tcp 127.0.0.1:9650: connectex: No connection could be made because the target machine actively refused it."

Если я отправляю эти 230 запросов снова и снова в течение 10 секунд, что генерирует около 10’000 запросов, загрузка CPU составляет около 30%. Но в этом случае только на первых 230 запросах некоторые отклоняются, после этого все запросы получают ответ.

Я использую точно такую же конфигурацию waitress на всех серверах Windows:

call waitress-serve --listen 127.0.0.1:9650 --threads 500 --connection-limit 1000 --backlog 4096 config:application

Поскольку я использую одинаковую конфигурацию на всех серверах Windows, и на других серверах я могу отправить 500 запросов с K6 без проблем, мне кажется, что Windows каким-то образом ограничивает количество одновременных запросов на этом порту.

Некоторые исследования указали мне на очередь порта и на необходимость добавить MaxUserPort и TcpTimeWaitDelay в реестр:
Computer\HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters, но это ничего не изменило.

Некоторая информация о сервере:

  • Windows Server 2022 Datacenter
  • VMWare7.1
  • Процессор: Intel(R) Xeon(R) Gold 6342 CPU @ 2.80GHz, 2793 МГц, 2 ядра, 2 логических процессора

Мои вопросы для лучшего понимания этой проблемы:

  • Что ограничивает количество одновременных соединений к порту? Это оборудование (ЦП и т. д.) или Windows или что-то еще?
  • Если это Windows, можно ли изменить количество одновременных соединений к порту?

Все подсказки для решения этой проблемы будут очень приветствоваться.

Ответ или решение

Почему происходит ошибка: "port actively refused requests"?

Ошибка, которую вы наблюдаете, часто связана с превышением ограничений на количество параллельных подключений к сетевому порту на вашем сервере. Давайте подробнее разберём, что может вызывать данную проблему, и как её можно решить.

Причины отказа в подключении

  1. Ограничения Windows на количество одновременных подключений:

    • В Windows существуют настройки, которые могут ограничивать количество одновременных подключений к TCP-портам. На вашем сервере эти настройки могут влиять на работу Waitress.
  2. Настройки Waitress:

    • Ваше текущее конфигурационное значение для Waitress указывает на ограничение в 1000 соединений. Однако, учитывая использование потока (threads) и подключений, это может не быть достаточным для обработки одновременно 230 запросов.
  3. Ограничения виртуальной машины:

    • Так как вы используете VMware, возможно, настройки виртуализации или выделенные ресурсы (CPU, память) могут ограничивать производительность вашего сервера.
  4. Параметры сети:

    • Значения в реестре, такие как MaxUserPort и TcpTimedWaitDelay, могут повлиять на способность сервера обрабатывать новые подключения. Хотя вы уже пробовали их настраивать без видимого эффекта, стоит также проверить другие параметры TCP/IP.

Настройка системы для увеличения пропускной способности

Для решения вашей проблемы вы можете предпринять следующие шаги:

  1. Изменение реестра Windows:

    • Увеличьте MaxUserPort до значения, большего 65534 (обычно 49152 – 65534). Это можно сделать, установив следующее:
      HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters
      MaxUserPort = 65534 (DWORD)
  2. Настройка TcpTimedWaitDelay:

    • Уменьшите время ожидания сокета, увеличив количество доступных портов.
      HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters
      TcpTimedWaitDelay = 30 (DWORD)
  3. Использование более новых версий программ:

    • Убедитесь, что вы используете последние версии Windows и Waitress, так как могут быть исправлены ошибки и улучшена производительность с увеличением одновременных соединений.
  4. Мониторинг ресурсов виртуальной машины:

    • Убедитесь, что вашему серверу выделены достаточные ресурсы (CPU, память). Возможно, стоит увеличить количество логических процессоров или выделить больше памяти.
  5. Настройка Waitress:

    • Старайтесь оптимизировать значения --threads и --connection-limit, протестировав различные настройки для достижения наилучшей производительности при вашем сценарии нагрузки.

Ответы на ваши вопросы

  1. Что может ограничивать количество одновременных соединений?

    • Ограничить количество соединений могут как аппаратные (в CPU и RAM), так и программные настройки (операционная система и приложения, которые работают на сервере).
  2. Можно ли изменить число одновременно подключений в Windows?

    • Да, это можно сделать через редактор реестра, а также изменив настройки сетевых адаптеров и параметры TCP/IP.

Заключение

Ваши проблемы с подключениями могут быть вызваны сочетанием настроек Windows, нагрузки на сервер и конфигурации Waitress. Следуя предложенным рекомендациям, вы сможете улучшить обработку параллельных запросов и устранить проблему отказов в соединении. Если проблема сохраняется, может потребоваться более глубокая диагностика с использованием сетевых инструментов мониторинга.

Оцените материал
Добавить комментарий

Капча загружается...