Ich verwende uwsgi Version 2.0.13.1 mit folgenden Konfiguration:uwsgi Arbeiter stecken: Warum
bin/uwsgi -M -p 5 -C -A 4 -m -b 8192 -s :3031 --wsgi-file bin/django.wsgi --pidfile var/run/uwsgi.pid --touch-reload=var/run/reload-uwsgi.touch --max-requests=1000 --reload-on-rss=450 --py-tracebacker var/run/pytrace --auto-procname --stats 127.0.0.1:3040 --threads 40 --reload-mercy 600 --listen 200
(absolute Pfadnamen schneiden)
Als ich uwsgitop
laufen, alle 5 Arbeitnehmer beschäftigt erscheinen . Wenn ich versuche, den Stack-Trace für jeden Worker/Thread mit dem py-tracebacker zu bekommen, bekomme ich keine Antwort. Die Prozesse hängen einfach.
Wie könnte ich recherchieren, was genau die Ursache dafür ist, dass uwsgi-Prozesse hängen bleiben?
Wie könnte ich diese Situation verhindern?
Ich kenne die Harakiri-Parameter, aber ich bin mir nicht sicher, ob der Prozess getötet wird, wenn es andere aktive Threads hat.
PD: "Reload Gnade" ist auf einen sehr hohen Wert gesetzt, vermeiden Sie das Töten von Arbeitern mit noch aktiven Threads (scheint ein Fehler zu sein). Wir haben einige Web-Anfragen, die noch lange dauern (die auf dem Weg sind, in Jobs umgewandelt zu werden).
Vielen Dank im Voraus.
Haben Sie die Lösung dafür bekommen? –
Ja, siehe https://github.com/unbit/uwsgi/issues/1599. Grundsätzlich ist der Import einiger stdlib-Module wie zB die Protokollierung in Python 2.7 nicht threadsicher. Also habe ich die Importe ins wsgi-Modul selbst verschoben, die vor den Mitarbeitern laufen – erny