¿Cómo puedo observar lo que está haciendo nginx? (para resolver: "1024 conexiones de trabajo no son suficientes")

8

Tengo un sitio de muy bajo tráfico ejecutándose en nginx, con 4 trabajadores, 1024 conexiones cada uno.

Cada varias horas empiezo a ver en el registro de errores "1024 conexiones_de_trabajo no son suficientes" y mi sitio se ralentiza / se vuelve inestable. Un reinicio de nginx resuelve el problema por completo durante las próximas horas.

Claramente está sucediendo algo extraño, no hay forma de que esté sirviendo a 4k usuarios concurrentes de mi aplicación.

Además de mirar el registro de acceso (que parece normal), ¿hay alguna manera de observar con mayor detalle lo que está haciendo nginx?

¿Existe alguna combinación de configuración notoria que pueda provocar que las conexiones antiguas se mantengan abiertas y no cerradas?

Gracias.

editar esto no se ve bien

# lsof |grep nginx |grep CLOSE_WAIT |wc -l
1271
John Bachir
fuente
¿Estás usando proxypass?
Dan R
No, no estoy usando ningún tipo de configuración de proxy. Es un sitio de rieles para pasajeros.
John Bachir
1
Tal vez intente nginx.org/en/docs/debugging_log.html para ver con qué solicitudes sucede esto. No estoy familiarizado con pasajeros / rieles. Si esto está en el puerto que se conecta a los clientes web, el cliente ha cerrado la conexión pero nginx no se ha cerrado por su parte.
Dan R

Respuestas:

7

Sin proxy pass / reverse proxy

max_clients = worker_processes * worker_connections

Con proxy inverso

max_clients = (worker_processes * worker_connections ) / (X * 2)

2 es porque abres una conexión con lo que estás representando

Sin embargo, X son muchas conexiones simultáneas que estos clientes te hacen

Para ver qué conexiones están dando vueltas, podrías correr lsof -i :PORT. Mostrará todas las conexiones abiertas a nginx y su estado.

Dan R
fuente
intentando eso ... lsof 4.81 en Ubuntu ... "carácter de opción ilegal: I"
John Bachir
vea la salida de lsof en la edición anterior
John Bachir
1
no quería capitalizar el -i
Dan R