Назад | Перейти на главную страницу

Какое максимальное количество TCP-соединений я могу установить в Windows Server 2008?

Я хотел бы иметь как можно больше соединений (отдельные соединения от множества разных клиентов) на сервере под управлением Windows Server 2008, чтобы поддерживать приложение в стиле Comet. Приложение написано на C #. Соединения не будут болтливыми, они просто должны быть открыты (и оставаться открытыми). Купить много памяти и быстрые процессоры - не проблема.

Насколько я могу судить, я буду ограничен 65 тысячами одновременных открытых подключений на одну сетевую карту - максимальное количество портов. Это точно? Или я могу как-то выйти за пределы 65k подключений / NIC? Похоже, что существуют серверные продукты для Linux по крайней мере, поддерживающие сотни тысяч соединений. Как они это делают?

Вы можете выйти далеко за пределы 65 000 подключений; поскольку у вас может быть несколько подключений на порт (после принятия прослушиватель может подключиться к другому клиенту). Один конец или другой должны иметь некоторую разницу, обычно клиент выбирает случайный порт. Windows по умолчанию ограничена несколькими более чем 3000 из этих случайных портов; так что ваш типичный клиент будет максимально использовать это. Однако можно настроить клиент по-другому, и многие * nix ограничены гораздо большим, чем Windows.

В реестре есть параметр, ограничивающий максимальное количество подключений до 16 миллионов. Но есть и другие, более практические проблемы, которые обычно ограничивают вас меньшим (вы можете изменить значение реестра).

  • Windows занимает около 1 КБ ОЗУ на одно соединение (это ~ 16 ГБ для 16М подключений); и ваше приложение также должно будет каким-то образом отслеживать свои активные соединения (больше памяти).
  • Windows также будет проверять отсутствие ответа каждые 2 часа. При 16M соединениях это примерно каждые 0,5 мс; только на выполнение этих проверок потребуется значительная пропускная способность.