Obtuve el error aparentemente común "demasiados descriptores de archivo" en nginx. Después de mucha búsqueda, la solución es claramente aumentar el número de descriptores de archivo disponibles para nginx. Pero no hay suficiente información para que me sienta cómodo haciendo esto de una manera significativa y segura. Estos son los puntos principales que cubren la mayoría de los foros / correos electrónicos:
- el sistema operativo tiene su propio límite de descriptor de archivo total (en mi sistema,
cat /proc/sys/fs/file-max
salidas "100678") - cada usuario también puede tener su propio límite (pero en mi sistema, al ejecutarse
ulimit
como cualquier usuario emite "ilimitado", vea la actualización en la parte inferior con más detalles ) - algunas personas dijeron algo similar a lo que dijo esta persona : 'Directiva trabajador_nombre_del_archivo no especifica "cuántos", es el límite del sistema operativo el que lo hace. La directiva obrero_limit_nofile solo permite una manera rápida y sucia de ampliar este límite si no es suficiente. Entonces, ¿supongo que la implicación es que es "mejor" establecer el límite para el usuario de nginx OS en lugar de en la configuración?
Simplemente puedo agregar un valor de trabajador_rlimit_nofile mayor que el número de conexiones por trabajador y llamarlo por día, pero siento que realmente no sé qué está pasando aquí.
- ¿Por qué el límite por trabajador sería menor que el límite del sistema operativo?
- ¿Cómo puedo saber cuál es mi límite ahora?
actualización : tanto para el usuario root como para el usuario normal, las salidas ulimit son "ilimitadas", PERO ulimit -Hn
y ulimit -Sn
ambas generan 1024
setsebool -P httpd_setrlimit 1
para que nginx tenga permisos para establecer su límite.Hay que verificar la fuente para ser sincero, pero es bastante bajo.
Utilicé
worker_rlimit_nofile 15000;
y no tuve problemas, puede aumentarlo de forma segura, sin embargo, la posibilidad de quedarse sin descriptores de archivo es minúscula.fuente