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


12

Кажется, что сервер ограничен в ~ 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

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


На serverfault.com/questions/10852/… есть хорошие данные
sysadmin1138


Я проверил эти темы перед публикацией, но не повезло
TheSquad

Ответы:


8

Я нашел то, что ограничивало все:

max_map_count

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


Так что розетки были красной селедкой. Хорошо знать.
2010 г., 15:00

Как вы меняете это? У вас есть документ, который описывает, что он делает?
Райан Шиллингтон


2

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

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

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

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

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


pid_max уже в 999999
TheSquad

1

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


ip_local_port_range уже в 1024 65535.
TheSquad

0

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

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

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

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


Нет, не то: # ps -ef | grep -c 'root' = 147
TheSquad

это в контролируемой среде? не могли бы вы сделать несколько проверок? например, сколько процессов создается с каждым запросом? Кроме того, каков приоритет сервера? Если ты возрождаешься, это что-то меняет? Если нет, то я почти уверен, что вы достигнете либо предела процесса, либо предела потоков внутри процесса:>
Николайдис Фотис
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.