Максимальна кількість сокетів в 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


Я перевірив ці теми перед публікацією, не
пощастивши

Відповіді:



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

Мені шкода, що щось подібне промовляють у потоках, але я не маю часу їх прочитати: <

З першого погляду я бачу, що кількість згаданих вами сокетів становить приблизно половину максимальних користувачів. Як я можу здогадатися, у вас є окремий процес для кожного сокета (можливо, ви запускаєте сервер чи щось подібне)

Що ви можете зробити, це перевірити кількість процесу наступного разу, коли ви досягнете межі сокета.

Просто ідея, я не знаю, чи допомагає вона.


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

це під контрольованим середовищем? Ви могли б зробити кілька перевірок? наприклад, скільки процесів створюється з кожним запитом? Також, який пріоритет у сервері? Якщо ви відмовитесь, це щось змінить? Якщо ні, то я майже впевнений, що ви досягаєте або межі процесу, або межі потоку всередині процесу:>
Nikolaidis Fotis
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.