LINUX.ORG.RU

Максимальное кол-во одновременно открытых сокетов


0

0

Стокнулся с такой проблемой:
при тестировании сокет-сервера получил предел кол-ва одновременно открытых сокетов ~ 300. Сервер написан на Perl. Методика тестирования следующая: клиент (Perl) создает 20 процессов (fork), каждый из которых открывает 50 соединений с сервером. И клиент и сервер запускались на одном компьютере.

Каким образом можно увеличить сабж?

P.S. ОС не имеет значения. Приветствуются любые соображения.

Заранее благодарен.

Re: Максимальное кол-во одновременно открытых сокетов

Просто ради интереса завел сервер на Erlang и клиент на Python. Получилось 1020 соеденений на 1 debian linux box. Все настройки TCP/IP были по умолчанию.

yuriy123 ()

Re: Максимальное кол-во одновременно открытых сокетов

Есть такая командачка "ulimit" - с помощью нее можно все зделать (тока пускать под рутом надо)

zaz ★★★★ ()

Re: Максимальное кол-во одновременно открытых сокетов

добавлю свое ню
есть такой раздел /proc
очень полезно читать документацию на ядро

Aleks_IZA ()

Re: Re: Максимальное кол-во одновременно открытых сокетов

[12:37:45]$ulimit -a
core file size (blocks, -c) unlimited
data seg size (kbytes, -d) 1048576
file size (blocks, -f) unlimited
max locked memory (kbytes, -l) unlimited
max memory size (kbytes, -m) unlimited
open files (-n) 7237
pipe size (512 bytes, -p) 1
stack size (kbytes, -s) 262144
cpu time (seconds, -t) unlimited
max user processes (-u) 3618
virtual memory (kbytes, -v) unlimited

MojaHead ()

Re: Re: Re: Максимальное кол-во одновременно открытых сокетов

Хм-м-м, даже не знаю чего и сказать 7237 это никак не 300 !!
Мыслей 2:
1. Заканчивается лимит системных ресурсов - смотри /proc/sys/fs/file-max, посомтреть сколько сейчас открыто дескрипторов можно гдето так: "echo /proc/*/fd/* | wc -w" (естественно под рутом).
2. Скорее всего у тебя теряются дескрипторы, узнай сколько твоя прога их юзает: "ls /proc/<pid>/fd|wc -w"

zaz ★★★★ ()

Re: Re: Re: Re: Максимальное кол-во одновременно открытых сокетов

Попробовал я на линуксе, получил ~510 соединений. После этого клиент стал получать "Connection refused".

после запуска сервера:

echo /proc/*/fd/* | wc -w
715

после запуска клиента:

echo /proc/*/fd/* | wc -w
2625

сам клиент "потребляет" 63 дескриптора. Вобщем, какая-то странная арифметика получается. Это при том, что ulimit показал:

core file size (blocks, -c) 0
data seg size (kbytes, -d) unlimited
file size (blocks, -f) unlimited
max locked memory (kbytes, -l) unlimited
max memory size (kbytes, -m) unlimited
open files (-n) 1024
pipe size (512 bytes, -p) 8
stack size (kbytes, -s) 8192
cpu time (seconds, -t) unlimited
max user processes (-u) 4086
virtual memory (kbytes, -v) unlimited

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