2015-08-31 7 views
10

Wir verwenden Django + Gunicorn + Nginx in unserem Server. Das Problem ist, dass wir nach einer Weile viele Gunicorn-Worker-Prozesse sehen, die verwaist wurden, und viele andere, die zu Zombies geworden sind. Außerdem können wir sehen, dass einige Gunicorn-Arbeiterprozesse einige andere Gunicorn-Arbeiter hervorbringen. Unsere beste Vermutung ist, dass diese Arbeiter zu Waisen werden, nachdem ihre Eltern gestorben sind.
Warum laichten Gunicorn Arbeiter Kinderarbeiter? Warum sterben sie ?! Und wie können wir das verhindern?
Ich sollte auch erwähnen, dass wir Gunicorn Log-Level auf debug gesetzt haben und immer noch sehen wir nichts bedeutungsvolles, außer periodischen Log der Arbeiter Nummer, die Berichte Anzahl der Arbeiter, die wir von ihm wollten berichtet.Gunicorn sync Arbeiter laichen Prozesse

UPDATE Das ist die Linie, die wir gunicorn laufen verwendet:

gunicorn --env DJANGO_SETTINGS_MODULE=proj.settings proj.wsgi --name proj --workers 10 --user proj --group proj --bind 127.0.0.1:7003 --log-level=debug --pid gunicorn.pid --timeout 600 --access-logfile /home/proj/access.log --error-logfile /home/proj/error.log

+0

Können Sie Ihre Gunicorn-Konfiguration posten? Es ist schwer zu verstehen, was passieren könnte, ohne zu wissen, wie es aufgebaut ist. – jnovinger

+1

jedes Update auf Ihre Frage? Hast du eine Lösung gefunden oder herausgefunden, was falsch war? –

+0

das war lange her, wir haben uns ein oder zwei tage von gunicorn zu uWSGI geändert, nachdem ich diese frage gestellt habe und wir haben keine lösung gefunden. – sazary

Antwort

0

In meinem Fall stelle ich in Ubuntu Server (LTS veröffentlicht, jetzt sind fast 14.04 LTS Server), und ich habe nie Probleme mit gunicorn Daemons, erstelle ich eine gunicorn.conf.py und starten gunicorn mit dieser Konfiguration von Emporkömmling mit einem Skript wie folgt in /etc/init/djangoapp.conf

description "djangoapp website" 
start on startup 
stop on shutdown 
respawn 
respawn limit 10 5 

script 
    cd /home/web/djangoapp 
    exec /home/web/djangoapp/bin/gunicorn -c gunicorn.conf.py -u web -g web djangoapp.wsgi 
end script 

Ich konfiguriere Gunicorn mit einer .py Datei Config und ich installiere einige Optionen (Details unten) und stelle meine App (mit virtualenv) in /home/web/djangoapp und keine Probleme mit Zombie und Waisen Gunicorn Prozessen.

Ich verifizierte Ihre Optionen, Timeout kann ein Problem sein, aber ein anderes ist, dass Sie keine Max-Requests in Ihrer Konfiguration einrichten, ist standardmäßig 0, also kein automatischer Worker-Neustart in Ihrem Daemon und kann Speicherlecks generieren (http://gunicorn-docs.readthedocs.org/en/latest/settings.html#max-requests)

+0

Wir benutzten einen Supervisor, als wir das Problem sahen, dachten wir, dass es wegen Supervisors passiert. Wir haben es entfernt und das Problem ist geblieben. – sazary

+0

ok, also jetzt meine Antworten, verwenden Sie uwsgi und das Problem bleibt? Welches benutzt du jetzt anstelle von Supervisor? –

+0

Wir verwenden uwsgis eigenen Daemonizer-Mechanismus (ohne Supervisor) und nein, das Problem bleibt nicht bestehen. – sazary