LINUX.ORG.RU

Сколько TCP соединений можно поднять на линуксе ?


0

0

Интерисует максимальный предел.
Соединений имеется в виду конешно одновременно....
и можно ли этот лимит, если он есть, как-то изменить,
в практической задаче необходимо около 100-200 тысяч соединений

anonymous

listen() - для этого и предназначена почитай про нее man а что касается настроек сокета, то это если не ошибаюсь getsockopt() в man тоже она есть

nil5
()

>Сколько TCP соединений можно поднять на линуксе ? >Интерисует максимальный предел. >Соединений имеется в виду конешно одновременно....

на сколько хватит файловых дескрипторов

>и можно ли этот лимит, если он есть, как-то изменить,

в 2.4 ето жёсткий лимит. В 2.6 возможно можна

>в практической задаче необходимо около 100-200 тысяч соединений

По моему на один процесс - никак. На несколько процессов - не знаю.

cvv ★★★★★
()

меня интерисуют системные лимиты
listen(SO_MAXCONN)
и setrlimit(RLIMIT_NOFILE)
это известно и понятно

anonymous
()
Ответ на: комментарий от cvv

Я в свое время столкнулся с ограничением, что 1024 сокетов могут быть открыты одновременно одним процессом. Это лечится, используя fork, т.е. accept порождает сокет -- этот сокет предается функции, которая fork'ом запускается, как отдельный процесс. Сама функция должна только читать или писать в из сокета, и после завершения этих операций нужно закрыть сокет, созданный accept и завершать exit() и можно return. Но необходимо перед завершением передать данные с помощью IPC другой функции. Если операция с данными не критичны по времени, то можно обработку этих данных производить в этой функции, тогда использовать IPC не понадобится.

В этом случае, необходимо, как-то различать данные кому они предназначены.

rjaan ★★
()

Простите, я может быть чего-то не понимаю, но как мне видится TCP-соединение подразумевает захват процессом конкретного порта, а их всего 65535, т.к. порт занимает ровно 2 байта. Далее, одновременно с каждым портом может быть связан только 1 процесс, к тому определенное кол-во портов уже зарезервировано для стандартных служб и сервисов. Итого, свободными остаются уж ни как не 100 тыс. и тем более не 200 тыс., а <65535.

seiken ★★★★★
()
Ответ на: комментарий от seiken

Из расчета на 1 сетевой интерфейс естественно.

seiken ★★★★★
()
Ответ на: комментарий от seiken

>а их всего 65535, т.к. порт занимает ровно 2 байта

Читайте батенька читайте в доках все написано.
Это только слушающий порт может быть один, а вот сколько асоциированных сокетов со слущающем может быть открыто на этом порту я и сам не в курсе.

anonymous
()

И пересанте задавать глупые вопросы ...
Сколько у вас денег есть столько и поднимите. Если денего больше то поднимите больше.

anonymous
()
Ответ на: комментарий от rjaan

>Я в свое время столкнулся с ограничением, что 1024 сокетов могут быть открыты одновременно одним процессом.

Ето зависит от настроек твоего ядра и ограничений для твоего процесса

>Это лечится, используя fork

Согласно сказанного выше ето лечится изменением настроек ядра и снятием ограничений для твоего процесса. Таким образом ты можешь увеличить предел раз в 15. Точно не помню.

Ну а использование fork тоже разумно но не всегда целесообразно

cvv ★★★★★
()
Ответ на: комментарий от cvv

> Согласно сказанного выше ето лечится изменением настроек ядра и снятием ограничений для твоего процесса. Таким образом ты можешь увеличить предел раз в 15. Точно не помню.

Да нет это просто один из вариантов и не больше. Но держать открытыми 100-200 тысяч соединений это мне кажется накладно. Кто что думет?

rjaan ★★
()
Ответ на: комментарий от anonymous

Ах да, точно: accept возвращает новый дескриптор сокета (из другого адресного пространства дескрипторов), по которому идет связь, а их кол-во не ограничивается 65535. Стормозил я немного.

seiken ★★★★★
()
Ответ на: комментарий от rjaan

>> Согласно сказанного выше ето лечится изменением настроек ядра и снятием ограничений для твоего процесса. Таким образом ты можешь увеличить предел раз в 15. Точно не помню.

>Да нет это просто один из вариантов и не больше.

не уловил мысль.

>Но держать открытыми 100-200 тысяч соединений это мне кажется накладно. Кто что думет?

А что думать?? так и есть темболее без трёх-четырёх сетевых карт он их просто не создаст. По крайней мере по TCP.

cvv ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.