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

Максимальное количество сокетов в Linux

Кажется, что сервер ограничен ~ 32720 сокетами ... Я пробовал все известные изменения переменных, чтобы поднять этот предел. Но сервер остается ограниченным на 32720 открытых сокетах, даже если все еще есть 4Go свободной памяти и 80% простоя процессора ...

Вот конфигурация

~# ulimit -a
core file size          (blocks, -c) 0
data seg size           (kbytes, -d) unlimited
scheduling priority             (-e) 0
file size               (blocks, -f) unlimited
pending signals                 (-i) 63931
max locked memory       (kbytes, -l) 64
max memory size         (kbytes, -m) unlimited
open files                      (-n) 798621
pipe size            (512 bytes, -p) 8
POSIX message queues     (bytes, -q) 819200
real-time priority              (-r) 0
stack size              (kbytes, -s) 2048
cpu time               (seconds, -t) unlimited
max user processes              (-u) 63931
virtual memory          (kbytes, -v) unlimited
file locks                      (-x) unlimited

net.netfilter.nf_conntrack_max = 999999
net.ipv4.netfilter.ip_conntrack_max = 999999
net.nf_conntrack_max = 999999

Есть предположения ? (Этот вопрос, заданный при переполнении стека, пока безуспешен)

Я обнаружил, что все ограничивало:

max_map_count

Спасибо всем, кто ответил!

Вы ищете этого не в том месте; вы не сталкиваетесь с пользовательским лимитом, вы сталкиваетесь с системным лимитом, который обычно составляет 15-ю степень двойки в 32-битной системе, что, как я предполагаю, является вашей системой. Проверьте:

 % cat /proc/sys/kernel/pid_max 
 32768
 %

Но ты жестяная банка измените это тоже; на 32-битной машине это будет 2 ** 22 как абсолютный верхний предел, поэтому:

% sudo bash -c 'echo 4194303 > /proc/sys/kernel/pid_max'
%

Мне было бы интересно узнать, как у вас дела.

Если вы действительно пытаетесь посмотреть максимальное количество сокетов, с которыми вы можете открывать соединения, вы можете попробовать посмотреть cat / proc / sys / net / ipv4 / ip_local_port_range; это диапазон портов, которые ядро ​​будет использовать для исходящих сокетов, и у него разные значения по умолчанию в зависимости от вашего дистрибутива. Установка его на что-то вроде «1024 65535» - это настолько широкая возможность, насколько это возможно; Посмотрим, поможет ли это.

Прошу прощения, если в обсуждениях говорится что-то подобное, но сейчас у меня нет времени их читать: <

С первого взгляда я вижу, что количество сокетов, которые вы упомянули, составляет примерно половину максимального количества пользовательских процессов. Как я могу догадаться, у вас есть отдельный процесс для каждого сокета (возможно, вы запускаете сервер или что-то в этом роде)

Что вы можете сделать, так это проверить количество процессов в следующий раз, когда вы достигнете предела сокета.

Просто идея, не знаю, поможет ли это.