Google App Engine-Instanzen werden schnell heruntergefahren

8

Ich benutze die App Engine also schon seit einiger Zeit ohne Probleme. Mir ist bewusst, dass, wenn die App für eine Weile nicht von einem Besucher getroffen wurde, die Instanz heruntergefahren wird und der erste Besucher, der die Seite besucht, eine Verzögerung von ein paar Sekunden hat, während eine neue Instanz ausgelöst wird.

>

In letzter Zeit scheinen die Instanzen jedoch nur für eine sehr kurze Zeit am Leben zu sein (manchmal weniger als eine Minute). Wenn ich bereits eine Instanz eingerichtet habe und eine App-Webseite aktualisiere, wird sie weiterhin ausgelöst up eine andere Instanz (und die Seite, die es startet, ist minimale HTML-Homepage, sollte nicht viel CPU / Speicher benötigen). Wenn ich meine Protokolle anschaue, starte ich ständig neue Instanzen, was vorher nie der Fall war.

Irgendwelche Tipps, was ich sehen sollte, oder irgendwelche Ideen, warum das passiert?

Ich benutze auch Python 2.7, threadsafe, python_precompiled, eingehende Inbound-Dienste, NDB.

Aktualisierung:

Also habe ich meine App so geändert, dass sie mindestens eine freie Instanz hat, in der Hoffnung, dass dies das Problem lösen würde, aber sie feuert immer noch neue Instanzen, obwohl bereits eine residente Instanz läuft. Wenn also nur die 1 residente Instanz vorhanden ist (und ich außer mir keinen Traffic erhalte), und ich auf eine andere Seite meiner App gehe, wird immer noch eine neue Instanz gestartet.

Zusätzlich habe ich die Pending Latency auf 1.5s geändert, wie Koma darauf hingewiesen hat, aber das scheint nicht zu helfen.

Die Speicherbelegung der Instanzen liegt immer bei 53 MB, was überraschend ist, wenn die aufgerufenen Seiten nicht viel bewirken. Ich benutze die F1-Frontend-Instanz-Klasse und das hat eine Grenze von 128, aber so oder so, 53MB scheint hoch für das, was es tun sollte. Ist das beim Start eine akzeptable Größe?

Update 2: Ich habe gerade im Dashboard bemerkt, dass in den letzten 14 Stunden die Anfrage / _ah / warmup mit 24 404 Fehlern geantwortet hat. Könnte das zusammenhängen? Warum würden sie mit einem 404-Antwortstatus antworten?

Hauptfrage: Warum sollten ständig neue Instanzen gestartet werden (auch ohne Datenverkehr)? Vor allem dort, wo es bereits Instanzen gibt und warum sie so schnell herunterfahren?

    
adam 17.01.2013, 03:47
quelle

3 Antworten

4

Meine Lösung war, die Pending Latency -Zeit zu erhöhen.

Wenn eine Webseite 3 Ajax-Anfragen gleichzeitig auslöst, startet AppEngine neue Instanzen für die zusätzlichen Anfragen. Nach dem Konfigurieren der Minimale Pending-Latenz - Zeit, die auf 2,5 Sekunden festgelegt wurde, wurden alle drei Anforderungen von derselben Instanz verarbeitet, und der Durchsatz war akzeptabel.

Mein Projekt hat immer noch wenig Ladung / Verkehr ... also habe ich zusätzlich zur Anhebung der Pending Latency einen Account bei Pingdom eröffnet und ihn so konfiguriert, dass er jede Minute mein Appengine Projekt anpingt.

Die Kombination von beiden macht, dass ich eine Instanz habe, die am Leben bleibt und die meiste Zeit alle Anfragen erfüllt. Wenn wirklich notwendig, wird es auf neue Instanzen skaliert.

    
koma 17.01.2013, 11:09
quelle
1

1 Idle-Instanz bedeutet, dass app-engine immer eine zusätzliche Instanz für den nächsten Benutzer startet - deshalb sehen Sie, dass eine zusätzliche Instanz mit dieser Einstellung ausgelöst wird.

Wenn Sie die Einstellung für die inaktive Instanz entfernen (oder die Standardeinstellung verwenden) und nur die ausstehende Latenz erhöhen, sollte sie warten, bevor die zusätzliche Instanz ausgelöst wird.

In Bezug auf die Hauptfrage denke ich, dass @koma etwas sagen könnte, dass app-engine bei Standardeinstellungen dazu tendiert, zusätzliche Instanzen auszulösen, selbst wenn die Anfragen von derselben Sitzung kommen.

Nach meiner Erfahrung ist app-engine unter starkem Verkehr gut, aber schwierig (und manchmal auch frustrierend), wenn man unter wenig Verkehr arbeitet. Insbesondere ist es sehr schwierig, die Nuancen herauszufinden, nach denen die Kriterien für das Starten neuer Instanzen tatsächlich sind.

Persönlich habe ich einen "wake-up" -Cron-Job, um alle paar Minuten eine Instanz aufzurufen, um sicherzustellen, dass, wenn jemand auf die Seite kommt, eine Instanz bereit ist, zu dienen. Dies ist nicht ideal, weil es bei meinem Angebot isst, aber es funktioniert die meiste Zeit, weil der Verkehr auf meiner App ziemlich hoch ist.

    
JohnIdol 19.01.2013 16:29
quelle
0

Ich habe diese Art von Problem erst am Montag, dem 4. Februar, gegen 22:00 Uhr EST, begonnen und geht bis jetzt weiter. Zuerst bemerkte ich, dass Instanzen immer wieder hochflogen und herunterfielen und die Latenzzeit dramatisch anstieg. Es schien, als ob der Instanzen-Scheduler ungenutzte Instanzen zu schnell abschalten würde, was zu einem anschließenden Thrashing führen würde.

Ich habe minimale Leerlaufinstanzen auf 1 gesetzt, um die Latenz zu stabilisieren, was funktioniert hat. Es gibt jedoch immer noch neue Instanzen. Ich habe versucht, die Empfehlungen in diesem Thread nur minimale ausstehende Latenz festzulegen, aber das hilft nicht. Letztendlich werden inaktive Instanzen zu schnell ausgeschaltet. Dann, wenn sie benötigt werden, schießt die Latenz hoch, während sie versucht, neue Instanzen zu starten.

Ich bin mir nicht sicher, warum du das vor ein paar Wochen gesehen hast, und es begann erst vor ein paar Tagen für mich. Vielleicht haben sie ihren neuen Instanz-Scheduler Schritt für Schritt an die Kunden weitergegeben? Werden Instanzen nicht immer schnell heruntergefahren?

    
jacob 07.02.2013 02:06
quelle