Número máximo de socket en Linux

12

Parece que el servidor está limitado a ~ 32720 sockets ... He intentado cada cambio de variable conocido para aumentar este límite. Pero el servidor permanece limitado en el socket abierto de 32720, incluso si todavía hay 4Go de memoria libre y 80% de CPU inactiva ...

Aquí está la configuración

~# 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

Alguna idea ? (Esta pregunta como se hizo en stack-overflow sin suerte hasta ahora)

El escuadrón
fuente
serverfault.com/questions/10852/… tiene algunos datos buenos
sysadmin1138
Al igual que stackoverflow.com/questions/410616/…
sysadmin1138
Revisé

Respuestas:

8

He encontrado lo que estaba limitando todo:

max_map_count

Gracias a todos los que contestaron !

El escuadrón
fuente
Así que las cuencas eran un arenque rojo. Bueno saber.
pjz
¿Cómo lo cambias? ¿Tienes un documento que describe lo que hace?
Ryan Shillington
2

Estás buscando el lugar equivocado para este; no se encuentra con un límite de usuario, se encuentra con un límite del sistema que generalmente es la 15a potencia de 2 en un sistema de 32 bits, que es lo que supongo que es su sistema. Cheque:

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

Pero tú también puedes cambiar eso; en una máquina de 32 bits que sería 2 ** 22 como límite superior absoluto, entonces:

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

Me interesaría saber cómo te va.

Jerjes
fuente
pid_max ya está en 999999
TheSquad
1

Si realmente está tratando de ver el número máximo de sockets con los que puede abrir conexiones, puede intentar mirar cat / proc / sys / net / ipv4 / ip_local_port_range; Este es el rango de puertos que el kernel usará para los sockets de salida, y tiene diferentes valores predeterminados en función de su distribución. Establecerlo en algo así como '1024 65535' es lo más abierto posible; A ver si eso ayuda a las cosas.

pjz
fuente
ip_local_port_range ya está en 1024 65535.
TheSquad
0

Lo siento si se dice algo similar en los hilos, pero no tengo tiempo para leerlos ahora: <

Con un primer vistazo, veo que la cantidad de sockets que menciona es aproximadamente la mitad de los procesos de usuario máximos. Como puedo suponer, tienes un proceso separado para cada socket (probablemente ejecutas un servidor o algo así)

Lo que puede hacer es verificar el número de procesos la próxima vez que alcance el límite del socket.

Solo una idea, no sé si ayuda.

Nikolaidis Fotis
fuente
no, eso no: # ps -ef | grep -c 'root' = 147
TheSquad
¿Está eso bajo un ambiente controlado? podrías hacer algunos cheques? por ejemplo, ¿cuántos procesos se crean con cada solicitud? Además, ¿cuál es la prioridad del servidor? Si lo reconoces, ¿cambia algo? Si no es así, estoy casi seguro de que alcanzará el límite del proceso o el límite de hilos dentro de un proceso:>
Nikolaidis Fotis