2017-06-16 5 views
2

Ich habe eine mysql + django + uwsgi + nginx-Anwendung und ich hatte vor kurzem einige Probleme mit uwsgi Standardkonfiguration, so dass ich es neu konfigurieren möchte, aber ich habe keine Ahnung, was die empfohlenen Werte sind.Empfohlene Einstellungen für uwsgi

Ein anderes Problem ist, dass ich die Standardeinstellungen, die uwsgi verwendet, nicht finden konnte und das Debugging wirklich schwer macht.

Mit der Standardkonfiguration war die Site unter echtem Datenverkehr zu langsam (zu viele Anfragen blieben für den uwsgi-Socket hängen). Also habe ich eine Konfiguration aus einem Tutorial verwendet und es hatte cpu-affinity=1 und processes=4, die das Problem behoben. Die Konfiguration hatte auch limit-as=512 und jetzt bekommt die App MemoryErrors, also denke ich 512MB ist nicht genug.

Meine Fragen sind:

  1. Wie kann ich sagen, was die empfohlenen Einstellungen sind? Ich brauche es nicht, um perfekt zu sein, nur um den Verkehr in einer absteigenden Weise zu behandeln und nicht von Gedächtnisfehlern etc. abzustürzen. Speziell der empfohlene Wert für limit-as ist, was ich gerade jetzt am meisten brauche.

  2. Was sind die Standardwerte der Einstellungen von uwsgi?

Vielen Dank!

+0

Es in Zeiten wie diesen ist, dass Sie erkennen, wie genial nginx Dokumentation. Der uWSGI-Server ist nicht Teil von nginx und für [die andere QA] (https://stackoverflow.com/questions/44176413/nginx-is-giving-uwsgi-very-old-requests/44538312#44538312) konnte ich nicht t die Standardwerte finden, entweder! – cnst

+1

'uwsgi --help | grep default' gibt einen guten Anhaltspunkt. Aber ehrlich gesagt, sind die Vorgaben von uwsgi ziemlich gesund. Konzentriere dich darauf, was ein Problem verursacht, und stelle es wie @renzop ein. – Melvyn

Antwort

4

Wir laufen in der Regel ziemlich kleine Anwendungen ... Selten mehr als 2000 Anfragen pro Minute. Aber es ist schwierig, verschiedene Anwendungen zu vergleichen. Das ist, was wir auf die Produktion verwenden:

Empfehlung der documentation

Haharakiri = 20 # respawn processes taking more than 20 seconds 
limit-as = 256 # limit the project to 256 MB 
max-requests = 5000 # respawn processes after serving 5000 requests 
daemonize = /var/log/uwsgi/yourproject.log # background the process & log 

uwsgi_conf.yml

processes: 4 
threads: 4 


# This part might be important too, that way you limit the log file to 200 MB and 
# rotate it once 
log-maxsize : 200000000 
log-backupname : /var/log/uwsgi/yourproject_backup.log 

Wir verwenden das folgende Projekt für die Bereitstellung und Konfiguration unserer django-Anwendungen. (Keine Dokumentation hier sorry ... verwendet nur für intern)

https://github.com/iterativ/deployit/blob/ubuntu1604/deployit/fabrichelper/fabric_templates/uwsgi.yaml

Wie können Sie sagen, wenn Sie es richtig konfiguriert ist ...? Da es sehr auf Ihre Anwendung ankommt, würde ich empfehlen, einige Überwachungswerkzeuge wie newrelic.com zu verwenden und diese dann zu analysieren.

+0

Danke! Warum limit-as = 256? Woher weißt du, dass es gut für deine App ist? –

+0

Honakely, ich nahm nur den Standardwert, um mit zu beginnen und dann überprüft, ob es funktioniert. Überwachen und messen Sie, was Ihre App verbraucht. Wie bei jeder Optimierung beginnen Sie mit dem Standard, messen Sie und optimieren Sie dann, falls erforderlich. Habe das auch gefunden. http://uwsgi-docs.readthedocs.io/en/latest/ThingsToKnow.html Wenn Ihr Prozess zu viel Speicher verwendet, sollten Sie wahrscheinlich die Aufgabe in einem anderen Prozess ... (Sellerie etc,) – renzop

+0

Oder schneiden Sie die Informationen, die Sie wollen.Es gibt eine starke Beziehung zwischen Djangos Speicherverwendung und der Verwendung von 'select_related' mit feldlastigen Modellen. Es gibt Fälle, in denen es benötigt wird, und dann müssen Sie Ihre Brieftasche für zusätzlichen Speicher bringen. Aber es gibt auch viele Beispiele von "Information Cram", wo wir versuchen, alles auf einer einzigen Seite zu kleben, dass kein Mensch alles lesen/benutzen wird. – Melvyn