miércoles, 6 de julio de 2022

Nginx socket() failed (24: Too many open files)



Cómo solucionar el error "too many open files" en NGINX.



Al acceder a una web que pasaba a través de NGINX en modo reverse proxy, he visto que esta no era accesible y me he encontrado el siguiente log en su archivo de log:

2021/07/06 12:21:23 [alert] 28720#0: *59757 socket() failed (24: Too many open files) while connecting to upstream,

Esto ha ocurrido porque NGINX tenía demasiados archivos abiertos. Recordemos que, por defecto, NGINX puede abrir un máximo de 4096 archivos simultáneos por worker.

Para saltarnos esta limitaxción, deberemos usar el parámetro "worker_rlimit_nofile", el cual deberemos añadir al archivo /etc/nginx/nginx.conf antes del bloque http:

# Increase open files worker_rlimit_nofile 30000;

En el ejemplo anterior le estamos diciendo a NGINX que puede abrir un máximo de 30.000 archivos, lo cual debería ser suficiente para proxys con una cantidad elevada de peticiones por segundo.

Para aplicar los cambios, reiniciamos NGINX:

service nginx restart

Luego comprobamos que la config. se ha aplicado correctamente:

HOST # ps -ef | grep nginx root 5092 1 0 09:33 ? 00:00:00 nginx: master process /usr/sbin/nginx -c /etc/nginx/nginx.conf nginx 5093 5092 13 09:33 ? 00:37:06 nginx: worker process

Nos fijamos en el worker process, servicio con PID 5093 y miramos sus límites:

HOST # cat /proc/5093/limits | grep "open files" Max open files 30000 30000 files


Fuentes:

https://www.claudiokuenzler.com/blog/850/nginx-socket-failed-24-too-many-open-files
0