Eu descobri o que estava limitando tudo:
max_map_count
Obrigado a todos que responderam!
Parece que o servidor está limitado a ~ 32720 soquetes ... Eu tentei todas as alterações de variáveis conhecidas para aumentar esse limite. Mas o servidor fica limitado em 32720 socket aberto, mesmo que ainda haja 4Go de memória livre e 80% de cpu ocioso ...
Aqui está a configuração
~# 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
Alguma ideia? (Esta questão foi perguntada sobre transbordamento de pilha sem sorte até agora)
Você está procurando no lugar errado por essa; você não está correndo em um limite de usuário, você está correndo em um limite de sistema que geralmente é a potência 15 de 2 em um sistema de 32 bits, que é o que eu estou supondo que seu sistema seja. Verifique:
% cat /proc/sys/kernel/pid_max
32768
%
Mas você pode mudar isso também; em uma máquina de 32 bits que seria 2 ** 22 como limite máximo absoluto, então:
% sudo bash -c 'echo 4194303 > /proc/sys/kernel/pid_max'
%
Eu estaria interessado em saber como você vai.
Se você está realmente tentando olhar para o número máximo de sockets com os quais você pode abrir conexões, você pode tentar olhar para cat / proc / sys / net / ipv4 / ip_local_port_range; esse é o intervalo de portas que o kernel usará para soquetes de saída e possui padrões diferentes com base em sua distribuição. Configurá-lo para algo como '1024 65535' é tão aberto quanto você pode obtê-lo; veja se isso ajuda as coisas.
Lamento se algo semelhante está sendo dito nos tópicos, mas não tenho tempo para lê-los agora: <
Com um primeiro olhar, vejo que o número de soquetes que você mencionou é da metade do máximo de processos do usuário. Como eu posso imaginar que você tenha um processo separado para cada soquete (provavelmente você executa um servidor ou algo parecido)
O que você pode fazer é verificar o número do processo na próxima vez que atingir o limite do soquete.
Apenas uma ideia, não sei se isso ajuda.
Tags networking linux socket