2016-08-16 1 views
2

Ich habe einen Nginx-Webserver mit uWSGI App-Server auf einer einzigen CPU Ubuntu 14.04 Bild installiert.Wie lautet die Standardanzahl der Worker und Threads für den uWSGI-Server?

Dieser uWSGI App-Server verarbeitet erfolgreich eine Flask-App-Anfragen. Das Problem, mit dem ich konfrontiert bin, ist, dass manchmal Anfragen von einem einzelnen Client für eine längere Zeit (1-2 Stunden) auslaufen.

Dies geschah ohne Angabe von Worker oder Threads in meiner Datei uwsgi.conf. Gibt es eine ideale Anzahl von Arbeitern/Threads pro CPU?

Ich benutze Kaiser-Service, um den uWSGI App-Server zu starten. Diese ist, was meine uwsgi.conf wie

sieht in Bezug auf nginx/uwsgi
description "uWSGI" 
start on runlevel [2345] 
stop on runlevel [06] 
respawn 

env UWSGI=/var/www/parachute_server/venv/bin/uwsgi 
env LOGTO=/var/log/uwsgi/emperor.log 

exec $UWSGI --master --workers 2 --threads 2 --emperor /etc/uwsgi/vassals --die-on-term --uid www-data --gid www-data --logto $LOGTO --stats 127.0.0.1:9191 

Könnte dies ein Leistungsproblem sein oder ist es eher wahrscheinlich, dass diese Timeouts auftreten, weil ich nur eine einzige CPU mit bin?

Jede Hilfe wird sehr geschätzt!

Antwort

3

Interessante Frage, die Sie haben ...

Im Allgemeinen werden Sie mindestens 2 * #CPUs + 1 angeben Dies liegt daran, uwsgi ein Lesedurchführen könnte/an eine Steckdose schreiben, und dann werden Sie einen anderen Mitarbeiter haben, der Anfragen entgegennimmt. Außerdem ist das Flag threads hilfreich, wenn Ihre Worker synchron sind, da sie dem Master-Thread mitteilen können, dass sie noch arbeiten, und so eine Zeitüberschreitung verhindern.

Ich denke, mit einem Mitarbeiter war der Grund für Ihre Zeitüberschreitung (blockiert alle anderen Anfragen), aber Sie sollten Ihre Antworten von Ihrer App aus überprüfen. Wenn sie eine lange Zeit benötigen (sagen wir aus db lesen), sollten Sie die Anweisung uwsgi_read_timeout in Nginx anpassen, damit uWSGI die Anfrage verarbeiten kann.

Ich hoffe, das hilft.

Verwandte Themen