python - El servidor retorcido se cuelga inesperadamente mientras se ejecuta django
nginx twisted (2)
No hay código http 499 en rfc. Nginx define el código 499 en sí mismo.
Cuando un cliente envía una solicitud y cierra la conexión sin esperar la respuesta, se produce un código 499. Si hay muchos 499 en su access_log, en su mayoría son causados por los lentos back-ends (demasiado lentos para que los usuarios esperen). Es posible que deba optimizar el rendimiento de su sitio web.
Estoy ejecutando una aplicación django en twisted usando los scripts django-on-twisted de este sitio .
Todas las solicitudes son atendidas por un servidor nginx que reenvía las solicitudes relevantes a retorcidas. Tengo una configuración de URL para una API, que básicamente solo recibe solicitudes de obtención y realiza algún procesamiento en los parámetros de obtención antes de enviar una respuesta. Sin embargo, cuando un cliente específico está presionando la API, el servidor retorcido simplemente se apaga. Pegado a continuación es el registro de Nginx:
the.ip.of.client - - [21/Apr/2012:11:30:36 -0400] "GET /api/url/?get=params&more=params HTTP/1.1" 499 0 "-" "Java/1.6.0_24"
Los troncos retorcidos no muestran nada más que retorcidos stops trabajando en este punto. Con el código de error 499, supongo que el cliente cerró la conexión de forma inesperada, lo cual no tengo ningún problema. Si el cliente recibe la respuesta o no, no es importante para mí. Aquí está la vista django relevante:
def api_url(request):
if request.GET:
get_param = request.GET.get(''get'', [''''])[0]
more_param = request.GET.get(''more'', [''''])[0]
#some processing here based on the get params
return HttpResponse(''OK'')
else:
raise Http404
La solicitud del cliente es una solicitud válida y no afecta el procesamiento de manera adversa. Lo he probado desde el caparazón. Cuando lo probé en el servidor de desarrollo django, se bloqueó de la misma manera sin dejar ningún rastro de recibir la solicitud. Todo funciona perfectamente bien cuando se prueba desde el navegador. Además, el servidor retorcido funciona bien para todos los casos de uso regular. Esta es la primera vez que me enfrento a un problema. Cualquier ayuda o punteros serán apreciados.
- dices que el problema es de un cliente que golpea una URL en particular (¿reproducible?)
- ya que funciona para ti con gunicorn pero no con django-on-twisted, o bien el script no funciona correctamente o
twisted.web2
es el problema.
intente con $ sh init.sh yourdjangoproject stand
.
También puede intentar modificar run.py
para capturar SystemExit
:
import pdb
try:
# __main__ stuff here.
except (KeyboardInterrupt, SystemExit):
pdb.set_trace()