Se alcanza el límite de archivos abiertos de Daemon a pesar de que se han aumentado los límites del sistema

Se alcanza el límite de archivos abiertos de Daemon a pesar de que se han aumentado los límites del sistema

Estoy ejecutando Debian sibilante. Los límites de archivos aumentan a 100.000 por cada usuario. ulimit -ay ulimit -Hn/ -Snmuéstrame las cantidades correctas de límites máximos de archivos abiertos incluso en la pantalla. Pero por alguna razón no puedo tener más de ~4000 conexiones/archivos abiertos.

de sysctl.conf:

net.ipv4.tcp_fin_timeout = 1
net.ipv4.tcp_tw_recycle = 1
net.ipv4.ip_local_port_range = 500 65000
net.core.somaxconn = 81920

Salida de 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) 256639
max locked memory       (kbytes, -l) 64
max memory size         (kbytes, -m) unlimited
open files                      (-n) 999999
pipe size            (512 bytes, -p) 8
POSIX message queues     (bytes, -q) 819200
real-time priority              (-r) 0
stack size              (kbytes, -s) 8192
cpu time               (seconds, -t) unlimited
max user processes              (-u) 256639
virtual memory          (kbytes, -v) unlimited
file locks                      (-x) unlimited

por ejemplo redis:

cliente: benchmark con 100 clientes

Writing to socket: Connection reset by peer
Writing to socket: Connection reset by peer
Writing to socket: Connection reset by peer
Writing to socket: Connection reset by peer
Error: Connection reset by peer

información del servidor:

127.0.0.1:6379> info clients
-Clients
connected_clients:4005
client_longest_output_list:0
client_biggest_input_buf:0
blocked_clients:0

Java:

Caused by: io.netty.channel.ChannelException: Failed to open a socket.
Caused by: java.net.SocketException: Too many open files
        at sun.nio.ch.SelectorProviderImpl.openSocketChannel(Unknown Source)
java.io.IOException: Too many open files
Caused by: io.netty.channel.ChannelException: Failed to open a socket.
Caused by: java.net.SocketException: Too many open files
        at sun.nio.ch.SelectorProviderImpl.openSocketChannel(Unknown Source)
Caused by: io.netty.channel.ChannelException: Failed to open a socket.
Caused by: java.net.SocketException: Too many open files

ls -l /proc/[id]/fd | wc -lmuestra ~4000 descriptores

Respuesta1

Hay dos configuraciones que limitan la cantidad de archivos abiertos: un límite por proceso y un límite para todo el sistema. El límite para todo el sistema lo establece fs.file-maxsysctl, que se puede configurar en/etc/sysctl.conf(leer en el momento del arranque) o configurar sobre la marcha con elsysctlcomando o escribiendo a /proc/sys/fs/file-max. El límite por proceso lo establece ulimit -n.

El límite por proceso lo hereda cada proceso de su padre. Se puede establecer un valor predeterminado en/etc/security/limits.conf, pero esto sólo se aplica a sesiones interactivas, no a demonios iniciados en el momento del arranque. Se aplicará a un demonio sólo si se inicia a través de una sesión interactiva.

Para aumentar (o disminuir) los límites por proceso para un demonio, en general, edite su script de inicio y agregue una llamada ulimitjusto antes de que se inicie el demonio. El paquete Debian redis viene con una configuración en un archivo separado: /etc/default/redis. Comente la ULIMIT=línea y aumente el valor si es necesario.

información relacionada