webentwicklung-frage-antwort-db.com.de

uwsgi IOError: Schreibfehler

Ich habe ein Problem mit meiner nginx + uwsgi-Konfiguration für meine Django-App. Ich erhalte diese Fehler weiterhin im uwsgi-Fehlerprotokoll:

Mi Jan 13 15:26:04 2016 - uwsgi_response_writev_headers_and_body_do (): Gebrochene Pipe [Kern/Writer.c-Zeile 296] während POST/company/get_unpaid_invoices_chart/(86.34.48.7) IOError: Schreibfehler

Mi Jan 13 15:26:20 2016 - uwsgi_response_write_headers_do (): Gebrochene Pipe [core/writer.c Zeile 238] während GET /Gestiune/print_pdf/nir/136194/(89.122.255.186 ) IOError: Schreibfehler

Ich bekomme sie nicht für alle Anfragen, aber ich bekomme jede Minute ein paar davon. Ich habe danach gesucht und ich verstehe, dass dies geschieht, weil nginx die Verbindung zu uwsgi schließt, wenn uwsgi das schreiben möchte Antwort. Das sieht merkwürdig aus, weil ich in meiner Nginx-Konfiguration Folgendes habe:

include uwsgi_params;

uwsgi_pass unix: /home/project/Django/sbo_cloud/site.sock;

uwsgi_read_timeout 600;

uwsgi_send_timeout 600;

uwsgi_connect_timeout 60;

Ich bin sicher, dass keine der Anforderungen, für die der Fehler angezeigt wird, das Timeout von 600 Sekunden überschreitet. Irgendeine Idee, warum das passieren würde? 

Vielen Dank

15
Virgil Balibanu

Das Problem ist, dass Clients die Verbindung abbrechen und Nginx dann die Verbindung schließt, ohne dass uwsgi den Abbruch veranlasst. Wenn dann uwsgi mit dem Ergebnis zurückkommt, ist der Socket bereits geschlossen. Nginx schreibt einen Fehler 499 in das Protokoll und uwsgi wirft einen IOError. 

Die nicht optimale Lösung ist, Nginx anzuweisen, den Socket nicht zu schließen und zu warten, bis uwsgi mit einer Antwort zurückkommt. 

Fügen Sie uwsgi_ignore_client_abort in Ihre nginx.config ein.

location @app {
    include uwsgi_params;
    uwsgi_pass unix:///tmp/uwsgi.sock;

    # when a client closes the connection then keep the channel to uwsgi open. Otherwise uwsgi throws and IOError
    uwsgi_ignore_client_abort on;
}

Es ist nicht klar, ob es möglich ist, Nginx anzuweisen, die uwsgi-Verbindung zu schließen. Es gibt ein weiteres SO -Questin zu diesen Problemen: ( HTTP-Abbruch/Schließen von nginx nach uwsgi/Django )

15
David Dehghan

Eine alternative Lösung ist, die folgenden Einstellungen in die uWSGI-Konfiguration zu übernehmen:

ignore-sigpipe = true
ignore-write-errors = true
disable-write-exception = true

Siehe https://github.com/getsentry/raven-python/issues/732

2
Andrei