nginx uLimit 'trabajador_conexiones excede el límite de recursos de archivo abierto: 1024'

14

Sigo recibiendo este error nginx/error.logy me está volviendo loco:

8096 worker_connections exceed open file resource limit: 1024

He intentado todo lo que puedo pensar y no puedo entender qué está limitando nginx aquí. ¿Puedes decir qué me estoy perdiendo?

nginx.conf tiene esto:

worker_processes 4;
events {
        worker_connections 8096;
        multi_accept on;
        use epoll;
}

Cambié Ulimit de mi sistema de security/limits.confesta manera:

# This is added for Open File Limit Increase
*               hard    nofile          199680
*               soft    nofile          65535

root            hard    nofile          65536
root            soft    nofile          32768

# This is added for Nginx User
nginx           hard    nofile          199680
nginx           soft    nofile          65535

Seguía mostrando el error. Así que también intenté editar /etc/default/nginxy agregué esta línea:

ULIMIT="-n 65535"

Sigue mostrando el mismo error. No puedo entender qué es lo que limita la conexión del trabajador nginx a solo 1024. ¿Puedes señalarme?

Tengo Debian 7 + nginx

Neel
fuente

Respuestas:

29

Establecer worker_rlimit_nofile 65535;en nginx.conf dentro del contexto principal.

Xavier Lucas
fuente
1
¡Eso es! Eso lo arregló. Oh eres un salvador. Funciona ahora incluso cuando ULimit no se configura manualmente /etc/default/nginx file. Increíble. Gracias @Xaviour
Neel
1
bien hecho Xavier.
Dave Holland
@Xavier esto eliminó el mensaje de error, pero ¿puede explicar por qué esto funciona sin cambiar ulimit como se menciona en la respuesta a continuación? las búsquedas de google le dicen que cambie ulimit en limits.conf o systcl.conf, pero ninguno funciona para mí.
Bsienn
2

Hazte usuario:

su - nginx

Verifica los límites:

ulimit -Hn
ulimit -Sn

Edite la cantidad de archivos que el sistema de archivos le permitirá abrir:

vi /etc/sysctl.conf
fs.file-max = 70000

carga tus cambios:

sysctl -p

A ver si eso ayuda.

Dave Holland
fuente
Estoy usando init y no he instalado systemctl. ¿Eso haría una diferencia?
Neel
Cuando cambié a usuario de Nginx, el ulimit -Hn se muestra correctamente allí. Luego verifiqué init.d/nginxy verifica si ULIMIT está configurado en la carpeta predeterminada (donde ya está configurado) y luego se supone que establece ese valor pero no:Check if the ULIMIT is set in /etc/default/nginx
Neel
Después de cambiar file-max y tan pronto como ejecuto sysctl -pubuntu 18.04.2 se cuelga, abre demasiados archivos y no arranca, tuve que eliminar el código en el arranque seguro para que el sistema operativo arranque nuevamente.
Bsienn