2010-04-09 7 views
90

Ich habe zwei sehr einfachen Heroku Apps den Dienst zu testen, aber es nimmt oft mehrere Sekunden, um die Seite zu laden, wenn ich sie zuerst besuchen:Warum brauchen meine Heroku-Apps zwei Sekunden zum Laden?

Alles, was ich tat, war eine einfache Sinatra-App erstellen und bereitstellen. Ich habe nichts unternommen, um die Heroku-Server zu stören oder zu testen. Was kann ich tun, um die Antwortzeit zu verbessern? Im Moment ist es sehr langsam und ich bin mir nicht sicher, wo ich anfangen soll. Der Code für die Projekte ist auf GitHub, wenn das hilft.

Antwort

147
  • Wenn Ihre Anwendung für eine Weile nicht verwendet wird, wird sie entladen (aus dem Speicher des Servers).
  • Beim ersten Treffer wird es geladen und bleibt solange geladen, bis niemand mehr darauf zugreift.

Dies wird getan, um Serverressourcen zu sparen. Wenn niemand Ihre App nutzt, warum sollten Sie die Ressourcen nicht strapazieren und jemanden, der sie wirklich braucht, nicht benutzen?
Wenn Ihre App viel Verkehr hat, wird sie nie entladen.

Es gibt eine official note darüber.

+2

Es ist getan, damit der Server etwas freien Gedächtnis haben kann, wenn andere Anwendungen es benötigen. Zweitens ist es ziemlich einfach, einen Server mit Anwendungen zu überlasten, wenn sie immer ausgeführt werden. Es gibt zahlreiche Gründe. Clyfe nagelt die einfache Version davon. –

+0

ist das irgendwo in der Dokumentation? wie lange nach dem nichts passiert? Danke für die Antwort, das macht die Dinge viel klarer :). –

+0

Ich denke, es ist ein Passagier Verhalten – shingara

14

Sie könnten auch die Cache-Optionen untersuchen, die Sie auf Heroku w/Varnish und Memcached haben. Diese werden unabhängig von den Dynos beibehalten.

Wenn Sie beispielsweise eine unveränderte Startseite haben, können Sie diese für längere Zeiträume in Varnish zwischenspeichern, indem Sie der Antwort Cache-Control-Header hinzufügen. Dann werden Ihre Benutzer den Last-Hit nicht erleben, bis sie etwas "tun" wollen, anstatt wenn sie ankommen.

3

Ich habe das gleiche Problem. Ich habe letzte Nacht eine Rails 3 (1.9.2) App installiert und es ist langsam. Ich weiß, dass 1.9.2/Rails 3 in BETA auf Heroku ist, aber das Support-Ticket sagte, dass es in Ordnung sein sollte, einige Anweisungen zu verwenden, die sie mir schickten.

Ich verstehe, dass die erste Anfrage nach einer langen Zeit am längsten dauert. Macht Sinn. Aber das Laden von Seiten, die nicht einmal eine Verbindung zu einer Datenbank herstellen, dauert manchmal 10 Sekunden.

Wie auch immer, Sie möchten vielleicht versuchen, was ich tun werde. Das ist Profil meiner App und sehen, wie lange es lokal dauert. Wenn es 400ms dauert, stimmt etwas nicht. Aber wenn ich 50ms lokal bekomme und es immer noch 10 Sekunden auf Heroku gibt, dann stimmt definitiv etwas nicht.

Offensichtlich hilft Caching, aber Sie erhalten nur 5 MB kostenlos und noch einmal, mit einer Person, die die Website verwenden, sollte es nicht so langsam sein.

2

Sie sollten Tom Robinsons Antwort auf "Skalierbarkeit: Wie funktioniert Heroku?" auf Quora: http://www.quora.com/Scalability/How-does-Heroku-work

Heroku teilt Serverressourcen unter vielen verschiedenen Kunden/Anwendungen auf. Ihre App verfügt über Blöcke von Rechenleistung. Heroku-Partitionen basierend auf Ressourcenbedarf. Wenn Sie eine beliebte Anwendung haben, die mehr Leistung verlangt, können Sie mehr "Dynos" (Anwendungscontainer) bezahlen und erhalten dann einen größeren Teil des Kuchens zurück.

In Ihrem Fall, aber Sie haben eine kostenlose App, die nur wenige Leute - wenn überhaupt außerhalb von Ihnen - besuchen/verwenden. Daher verringert Heroku die Ressourcen, die Sie erhalten, indem Sie Ihre App entladen - und damit im Wesentlichen in den Ruhezustand versetzen -, bis eine Anfrage an Ihre Adresse erfolgt. Wenn dies der Fall ist und Ihre App längere Zeit nicht verwendet wurde, dauert das erneute Laden.

Fügen Sie einen zusätzlichen Prüfstand hinzu, damit Ihre App nicht einschläft, wenn diese Zeit zum erneuten Laden wichtig ist.