Сколько разъемов возможно? - PullRequest
71 голосов
/ 16 марта 2009

Кто-нибудь знает, сколько соединений через tcp-сокеты возможно на современном стандартном корневом сервере? (Как правило, на каждом соединении меньше трафика, но все соединения должны постоянно работать.)

РЕДАКТИРОВАТЬ: Мы будем использовать сервер Linux.

Ответы [ 9 ]

83 голосов
/ 13 марта 2012

Я достиг 1600k одновременных соединений в режиме ожидания и одновременно 57k req / s на рабочем столе Linux (16G RAM, I7 2600 CPU). Это однопотоковый http-сервер, написанный на C с epoll. Исходный код находится на github , блог здесь .

Edit:

Я сделал 600k одновременных HTTP-соединений (клиент и сервер) на одном и том же компьютере с JAVA / Clojure. подробная информация сообщение , HN обсуждение: http://news.ycombinator.com/item?id=5127251

Стоимость подключения (с эполлом):

  • приложению требуется ОЗУ для каждого соединения
  • TCP-буфер 2 * 4k ~ 10k или больше
  • epoll требуется немного памяти для файлового дескриптора из epoll (7)

Каждый зарегистрированный файловый дескриптор стоит примерно 90 байты в 32-битном ядре и примерно 160 байтов в 64-битном ядре.

22 голосов
/ 16 марта 2009

Это зависит не только от рассматриваемой операционной системы, но и от конфигурации, потенциально от конфигурации в реальном времени.

Для Linux:

cat /proc/sys/fs/file-max

покажет текущее максимальное количество файловых дескрипторов, общее количество которых разрешено открывать одновременно. Проверить http://www.cs.uwaterloo.ca/~brecht/servers/openfiles.html

8 голосов
/ 30 мая 2009

10000? 70000? это все:)

FreeBSD - это, вероятно, сервер, который вам нужен. Вот небольшой пост в блоге о настройке его для обработки 100 000 подключений, в нем уже есть некоторые интересные функции, такие как сокеты с нулевым копированием, а также kqueue для действует как механизм порта завершения.

Solaris может обрабатывать 100 000 подключений еще в прошлом веке! Говорят, Linux будет лучше

Лучшее описание, с которым я столкнулся, - это презентация / статья о написании масштабируемого веб-сервера. Он не боится сказать, что это так:)

То же самое для программного обеспечения: кретины на прикладной уровень принудительно велик инновации на уровне ОС. Так как Lotus Notes сохраняет одно TCP-соединение за каждого открытого клиента IBM внесла крупный оптимизация для одного процесса, 100.000 открытых подключений »к Linux

А планировщик O (1) изначально создан, чтобы выиграть на некоторых нерелевантный бенчмарк Java. Дно линия заключается в том, что этот вздор приносит пользу всем нам.

5 голосов
/ 09 апреля 2017

Ограничение на количество открытых сокетов настраивается в файловой системе / proc

cat /proc/sys/fs/file-max

Макс. Для входящих соединений в ОС, определенных целочисленными ограничениями.

Сам Linux позволяет миллиардов открытых сокетов.

Для использования сокетов необходимо прослушивание приложения, например, веб-сервер, который будет использовать определенный объем оперативной памяти на сокет.

RAM и CPU введут реальные ограничения. (современный 2017 год, думаю, миллионы, а не миллиарды)

1 миллион возможно, а не просто. Ожидается использование X гигабайт оперативной памяти для управления 1 миллионом сокетов.

Исходящие TCP-соединения ограничены номерами портов ~ 65000 на IP. Вы можете иметь несколько IP-адресов, но не неограниченные IP-адреса. Это ограничение в TCP, а не в Linux.

5 голосов
/ 17 марта 2009

В Linux вы должны использовать epoll для асинхронного ввода-вывода. Также может потребоваться точная настройка буферов сокетов, чтобы не тратить слишком много места в ядре на соединение.

Я полагаю, что вы должны быть в состоянии достичь 100 тыс. Соединений на разумной машине.

3 голосов
/ 27 ноября 2011

зависит от приложения. если есть только несколько пакетов от каждого клиента, 100K очень просто для Linux. Инженер моей команды провел тестирование несколько лет назад, и результат показывает: когда после установки соединения пакет от клиента отсутствует, linux epoll может наблюдать 400 тыс. Fd на предмет читабельности при уровне использования процессора ниже 50%.

1 голос
/ 17 марта 2009

Какая операционная система?

Для машин Windows, если вы пишете сервер для правильного масштабирования и, следовательно, используете порты завершения ввода / вывода и асинхронный ввод / вывод, тогда основным ограничением является количество невыгружаемого пула, который вы используете для каждое активное соединение. Это напрямую переводит в ограничение, основанное на объеме памяти, установленной на вашей машине (пул невыгружаемого пространства - это ограниченный объем фиксированного размера, основанный на общем объеме установленной памяти).

Для соединений, которые не видят большого трафика, вы можете уменьшить их, сделав их более эффективными, публикуя «нулевые байтовые чтения», которые не используют пул невыгружаемого списка и не влияют на ограничение заблокированных страниц (еще один потенциально ограниченный ресурс, который может помешать вам иметь много открытых соединений сокетов).

Кроме того, вам нужно будет профилировать, но мне удалось получить более 70 000 одновременных подключений на скромно указанном (760 МБ памяти) сервере; см. здесь http://www.lenholgate.com/blog/2005/11/windows-tcpip-server-performance.html для более подробной информации.

Очевидно, что если вы используете менее эффективную архитектуру, такую ​​как «поток на соединение» или «выбор», то следует ожидать менее впечатляющих показателей; но, имхо, просто нет причин выбирать такие архитектуры для серверов сокетов Windows.

Редактировать: см. Здесь http://blogs.technet.com/markrussinovich/archive/2009/03/26/3211216.aspx; способ вычисления объема невыгружаемого пула изменился в Vista и Server 2008, и теперь доступно гораздо больше.

0 голосов
/ 16 марта 2009

Google вокруг проблемы "C10K". Это в основном обсуждение и технология управления 10 000 или более одновременных соединений.

Я подозреваю, что это число было выбрано, потому что это сложно, но теоретически возможно.

0 голосов
/ 16 марта 2009

Реально для применения более 4000-5000 открытых розеток на одном станке становится нецелесообразным. Просто проверка активности на всех сокетах и ​​управление ими начинает становиться проблемой производительности, особенно в средах реального времени.

...