2 votos

¿Es normal que NGINX acumule conexiones en estado de escritura?

Este es un gráfico que muestra el recuento de conexiones desde el stab_status de nginx, las caídas en el gráfico son reinicios manuales del servidor.

Estado de NGINX - por año

Encuentro este comportamiento extraño, parece que hay alguna fuga. Creo que hay conexiones colgadas que deberían cerrarse, pero permanecen en estado de escritura.

¿Es esto normal? ¿Debería tomar alguna acción? En caso afirmativo, ¿en qué dirección?

Intenté cambiar el keepalive de nginx, y luego algunos ajustes del kernel como este https://gist.github.com/perusio/2154235

Pero este comportamiento no ha cambiado.

El servidor es un VPS con un procesador disponible y 1024mb de RAM.

EDICIÓN 1: versiones

versión de nginx: nginx/1.6.2 construido por gcc 4.8.2 (Ubuntu 4.8.2-19ubuntu1) Soporte TLS SNI habilitado argumentos de configuración: --add-module=/root/ngx_pagespeed-release-1.9.32.3-beta --prefix=/etc/nginx --conf-path=/etc/nginx/nginx.conf --error-log-path=/var/log/nginx/error.log --http-client-body-temp-path=/var/lib/nginx/body --http-fastcgi-temp-path=/var/lib/nginx/fastcgi --http-log-path=/var/log/nginx/access.log --http-proxy-temp-path=/var/lib/nginx/proxy --http-scgi-temp-path=/var/lib/nginx/scgi --http-uwsgi-temp-path=/var/lib/nginx/uwsgi --lock-path=/var/lock/nginx.lock --pid-path=/var/run/nginx.pid --with-pcre-jit --with-http_ssl_module --without-mail_pop3_module --without-mail_smtp_module --without-mail_imap_module --without-http_scgi_module --with-ipv6 --with-http_stub_status_module --sbin-path=/usr/sbin/nginx --with-http_spdy_module

Tenga en cuenta que se ejecuta ngx_pagespeed

EDICIÓN 2: Más información

Nginx está funcionando como proxy inverso para la aplicación uwsgi/django. Voy a monitorear uwsgi y publicar los resultados para ver mejor si uwsgi tiene algo que ver.

2voto

Xavier Lucas Puntos 5349

Como se describe en la documentación del módulo stub_status, una conexión en estado de escritura significa :

Writing

El número actual de conexiones donde nginx está escribiendo la respuesta de vuelta al cliente.

Por lo tanto, deberías investigar los tiempos de respuesta de tu servidor y verificar por qué tarda tanto en que los clientes reciban las respuestas de nginx y cierren la conexión posteriormente : red lenta, volúmenes de datos altos, transferencia de chunked, websockets ...

2voto

MikroDel Puntos 257

Si algunos de sus servidores utilizan SPDY o HTTP/2, su problema tiene sus root en un defecto en la integración de estos protocolos. Puede consultar nginx ticket #714.

El estado actual es:

Hay al menos una fuga de conexión en HTTP/2, la cual fue corregida en nginx 1.11.3 y la solución aún no está disponible en 1.10.x. Por favor, pruebe con 1.11.x en su lugar.

1voto

Este parece ser un comportamiento normal, ya que siempre habrá clientes que tengan una conexión poco fiable y dejen las conexiones del servidor en un estado de "envío". No están leyendo más datos, pero Nginx seguirá esperando hasta que se cumpla el send_timeout antes de cerrar la conexión.

También pueden ser ataques donde los clientes maliciosos hacen deliberadamente eso para agotar las conexiones y descriptores de archivo disponibles del servidor, por lo que si esto se convierte en un problema real, deberías intentar reducir el valor mencionado anteriormente.

EnMiMaquinaFunciona.com

EnMiMaquinaFunciona es una comunidad de administradores de sistemas en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros sysadmin, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X