Ich habe eine Django-App eingerichtet, die statische Dateien über Nginx bereitstellt, und den Upstream, der über Gunicorn läuft, um die Django-App mit einer PSQL-Datenbank auszuführen, die auf einem dedizierten Server liegt.
Das Problem ist, dass die Site zu lange braucht, um zu reagieren, selbst für die Homepage, die keinen Zugriff auf die Datenbank erfordert.
Ein wichtiges Detail, das zu beachten ist, ist, dass ich beim Neustart des Supervisor-Dienstes (der für zwei Prozesse verantwortlich ist, einer ist Gunicorn und der andere Celery) schnelle Antworten für maximal 3 Anfragen bekomme.
Nach diesen 3 Anfragen reagiert die Anwendung wieder nicht mehr.
Was die Konfiguration betrifft, ist Nginx mit Timeouts (alle 3: Verbinden, Lesen und Senden) auf 300 eingestellt.
Gunicorn hat dasselbe Timeout und ist so konfiguriert, dass 3 Worker ausgeführt werden.
Die Anwendung läuft auf einem VPS mit einer einzelnen CPU und 1 GB Speicher.
Unten sehen Sie die Ausgabe voniostatfür grundlegende Statistiken.
avg-cpu: %user %nice %system %iowait %steal %idle
1.49 0.00 0.44 0.03 3.21 94.83
Device: tps kB_read/s kB_wrtn/s kB_read kB_wrtn
xvda 0.74 3.23 12.79 1023355 4054257'
Was könnte die Ursache für dieses Verhalten sein?
Antwort1
Wie in den Kommentaren von Tero Kilkanen erwähnt, stellte sich heraus, dass das Problem der Code selbst war.
Ich habe den Server mit Anfragen bombardiert, um den Anschein einer Echtzeitanwendung zu erwecken, und das wiederum hat dazu geführt, dass der gesamte Server nicht mehr für andere Anfragen verfügbar war.
Ein Blick auf die Serverstatistiken hat das Problem nicht geklärt, da alle Metriken zeigten, dass der Server für die Arbeit verfügbar war.
Wenn Sie also auf ein solches Problem stoßen, prüfen Sie Ihre Nginx-Protokolle auf mehrere Anfragen innerhalb kurzer Zeitabstände.