Dies ist sehr spezifisch, aber ich werde versuchen, sich kurz zu fassen:Heroku Sporadische Hohe Reaktionszeit
Wir sind eine Django App auf Heroku läuft. Drei Server:
- Test (1 Netz, 1 Sellerie dyno)
- Training (1 Netz, 1 Sellerie dyno)
- prod (2 web, 1 Sellerie dyno).
Wir verwenden Gunicorn mit gevents und 4 Arbeiter auf jeder dyno.
Wir sind sporadisch hohe Servicezeiten. Hier ein Beispiel von Loggetries:
High Response Time:
heroku router - - at=info
method=GET
path="/accounts/login/"
dyno=web.1
connect=1ms
service=6880ms
status=200
bytes=3562
Ich google dies seit Wochen. Wir sind nicht in der Lage, sich nach Belieben zu reproduzieren, sondern erleben diese Warnungen 0 bis 5 Mal am Tag. Bemerkenswerte Punkte:
- Tritt auf allen drei Anwendungen (alle laufenden ähnlichen Code)
- Tritt auf verschiedenen Seiten, darunter einfache Seiten wie 404 und/admin
- Tritt zu zufälligen Zeiten
- Tritt mit variierendem Durchsatz. Eine unserer Instanzen fährt nur 3 Benutzer/Tag. Es hängt nicht mit schlafenden Dynos zusammen, weil wir mit New Relic pingen, und das Problem kann während der Sitzung auftreten
- Kann nicht reproduziert werden nach Belieben. Ich habe dieses Problem persönlich einmal erlebt. Das Klicken auf eine Seite, die normalerweise in 500ms ausgeführt wird, führte zu einer Verzögerung von 30 Sekunden und schließlich zu einem App-Fehlerbildschirm von Herokus 30s Zeitüberschreitung
- Hohe Antwortzeiten variieren von 5000ms - 30000ms.
- New Relic weist nicht auf ein bestimmtes Problem hin. Hier sind die letzten Transaktionen und Zeiten:
- RegexURLResolver.resolve
4,270ms
- SessionMiddleware.process_request
2,750ms
- Login Render.html
1,230ms
- WSGIHandler
1,390ms
- Die oben genannten sind einfach Anrufe und nehmen Sie nicht normalerweise in der Nähe dieser Menge an Zeit
- RegexURLResolver.resolve
Was ich habe es verengt zu:
This article on Gunicorn and slow clients- Ich habe dieses Problem mit langsamen Clients, aber auch in unserem Büro, wo wir eine Glasfaserverbindung haben, gesehen.
GEVENT und async Arbeiter spielen nicht schön- Wir gewechselt haben sync Arbeiter und Problem noch gunicorn weiterhin besteht.
- Gunicorn Arbeiter Timeout
- Es ist möglich, dass die Arbeiter irgendwie am Leben erhaltenen werden in einem Null-Zustand.
Zu wenig Arbeiter/dynos- Keine Anzeige von CPU/Speicher/db Überauslastung und New Relic keine Anzeichen von DB Latenz
- Laute Nachbarn zeigen
- Unter meinen mehreren E-Mails mit Heroku hat der Support-Mitarbeiter erwähnt, dass mindestens einer meiner langen Anfragen auf einen lauten Nachbarn zurückzuführen war, aber nicht überredet wurde Das war das Problem.
Subdomäne 301- Die Anforderungen, die durch feine kommen, sondern zufällig in der Anwendung stecken zu bleiben.
Dynos Neustart- Wenn dies der Fall wäre, würden viele Benutzer betroffen sein. Außerdem kann ich sehen, dass unsere Dynos kürzlich nicht neu gestartet wurden.
- Heroku Routing/service Ausgabe
- Es ist möglich, dass der Heroku Service ist weniger als angekündigt und dies ist einfach ein Nachteil ihren Dienst zu verwenden.
Wir haben seit den letzten Monaten dieses Problem zu haben, aber jetzt, dass wir die Skalierung es repariert werden muss.Irgendwelche Ideen würden sehr geschätzt werden, da ich fast jeden SO oder Google Link erschöpft habe.
Das scheint wie eine gute Frage, aber möglicherweise erhalten bessere Antworten bei [Serverfault] (http://serverfault.com/) – jedwards
@jedwards danke, aber ein Benutzer da drüben kommentierte ich sollte es nach SO verschieben :) – grokpot
oh man - Ich halte es nicht für unangemessen, beides zu haben. Es scheint, als könnte es sich um ein Programmier- oder Bereitstellungsproblem handeln - eine Website ist auf jeden spezialisiert. – jedwards