2012-06-05 5 views
5

Uso Google Ap Engine con Stato di fatturazione abilitato.
istanze di inattività sono impostate per: (1 - 1)Perché GAE ha avviato una seconda istanza con Numero minimo di istanze inattive impostato su 1

enter image description here

E con solo 2 i clienti sul mio servizio, a volte ho visto una seconda istanza. Il problema è che ci vogliono 15 secondi per lanciare la nuova istanza (primavera e co ..).

enter image description here

80 MB di memoria è a hight per un caso?
Accedi per nuova istanza:/_ah/warmup 200 14580 ms 0kb
La seconda istanza scompare dopo alcuni secondi.

Perché con 3-4 richieste, GAE esegue una seconda istanza ?? Il primo non fa niente (quasi)!

Ho provato a modificare "Latenza in sospeso" senza esito positivo.

Una soluzione? :)

Thx

+0

Penso che questo comportamento sia abbastanza normale. Ogni volta che arrivano richieste, GAE avvia istanze inattive per essere in grado di servire in modo efficiente le richieste future. Questo è solo per garantire che tutti i clienti ottengano buone prestazioni. Penso che possiamo confrontare questo comportamento con il modo in cui funziona il pool di connessioni nei database. Vedi anche [link] (https://developers.google.com/appengine/docs/adminconsole/performancesettings#Setting_the_Number_of_Idle_Instances) –

+0

Sono d'accordo con te Jan; ma perché in quello dinamico ha "1" Richieste. È lo stesso comportamento che ho ma non ha senso per me perché a questo punto non è più un ciclo di riscaldamento ma un vero ciclo della richiesta di handle. E la richiesta gestita ha una grande latenza. –

risposta

3

Hai richiesto esattamente un'istanza inattiva. Quando viene pubblicata una richiesta, un'istanza non è inattiva. Pertanto, App Engine rilascia una nuova istanza per mantenere il numero richiesto di istanze inattive.

+0

Interessante! Ma se il nuovo è un'istanza inattiva, perché richiede una richiesta? (quindi avere un tempo di risposta di 15 secondi). Il guaio è che non ho avuto molto traffico. Quindi, se imposto l'istanza minima inattiva su Automatico, temo che tutti i miei clienti abbiano una latenza di 15 secondi per la loro prima richiesta :( – Samuel

+1

La richiesta è la richiesta di riscaldamento, che è specificamente per evitare che gli utenti debbano sopportare il tempo di caricamento. –

1

Se l'istanza residente è ritenuto "troppo occupato" per gestire una richiesta, App Engine inizierà un altro. Anche con un traffico molto basso, se l'app gestisce contemporaneamente abbastanza richieste, AE potrebbe decidere di aver bisogno di un'altra istanza per fornire un servizio di qualità. Hai ragione nel ritenere che l'aumento della latenza in sospeso ridurrà la possibilità che venga avviata un'altra istanza, ma non puoi proibire completamente le istanze dinamiche.

Inoltre, il multithreading è abilitato? In caso contrario, l'istanza residente sarà occupata anche se sta gestendo una sola richiesta. Se il codice è protetto da thread, è possibile abilitare il multithreading e gestire più richieste simultanee contemporaneamente all'istanza.

Con un traffico molto basso e un numero molto limitato di istanze, App Engine non ha molte informazioni da seguire quando si decide se è necessaria una nuova istanza. Vedrai un migliore utilizzo e meno istanze spurie con più traffico.

+0

Thx Dan. Sì, ho abilitato il multithreading. È assurdo che funzioni meglio con più traffico :) In che modo GAE determina che un'istanza è "troppo occupata"? Utilizzare un'istanza F2 è una soluzione? – Samuel

+0

Mi sento solo qualificato per dare una risposta fuzzy qui. Ci sono cose interessanti che AE potrebbe fare per fare buone ipotesi sul fatto che una determinata richiesta possa essere gestita adeguatamente da un'istanza con una particolare quantità di carico. Ma non sono sicuro di ciò che effettivamente fa AE, e vorrei che il team di AE avesse la libertà di mettere a punto questo pesantemente e non impegnarsi in una sola strategia. –

+1

La cosa principale da notare è che con istanze dinamiche, AE si riserva il diritto di avviare nuove istanze. Se si vuole davvero mantenere tutto andando a un server, è possibile utilizzare un backend indirizzabile, a scapito della gestione dinamica del carico. Ma suppongo che tu stia effettivamente chiedendo l'utilizzo dell'istanza: la 2a istanza implica che la prima istanza sia al massimo o poco utilizzata? La risposta è, in un dato momento, che potrebbe essere stata, ma ciò non significa che la tua app sia sotto carico continuo più grande di quanto un'istanza possa normalmente gestire. –

Problemi correlati