2012-03-06 7 views
6

Ho riscontrato questo problema per la seconda volta e mi chiedo se esiste una soluzione a questo problema. Sto eseguendo un'applicazione su Google App Engine che si basa su comunicazioni frequenti con un sito Web tramite HTTP JSON RPC. Sembra che GAE ha la tendenza a visualizzare in modo casuale un messaggio come questo nei log:GAE Go - "Questa richiesta ha provocato l'avvio di un nuovo processo per l'applicazione ..."

"Questa richiesta ha causato un nuovo processo da avviare per la vostra applicazione, e quindi causato il codice dell'applicazione da caricare per la prima volta Questa richiesta potrebbe richiedere più tempo e utilizzare più CPU rispetto a una tipica richiesta per l'applicazione. "

E ripristinare tutte le variabili memorizzate nella RAM senza preavviso. Lo stesso processo avviene ripetutamente, non importa quante volte ho impostato nuovamente le variabili o caricato il codice più nuovo su GAE, anche se l'incremento del numero di versione dell'app sembra risolvere il problema.

Come posso ottenere ulteriori informazioni su questo comportamento, su come evitarlo e prevenire la perdita di dati delle mie applicazioni Golang su Google App Engine?

EDIT:

Le variabili memorizzate nella RAM sono piccole classi di stringhe, byte, Caccio e puntatori. Niente di troppo complicato o grande.

Google App Engine sembra "avviare un nuovo processo" in termini di secondi di utilizzo più intenso, il che non dovrebbe essere il tempo necessario perché l'applicazione venga chiusa per non essere utilizzata. L'intervallo di tempo tra l'applicazione caricata su GAE, con il set di variabili e un nuovo processo in fase di creazione è inferiore a un minuto.

+0

È possibile chiarire la natura delle variabili memorizzate nella RAM? Potresti memorizzare i dati in Memcache? – kristianp

risposta

3

Si può leggere su casi GAE nella propria documentazione qui, controlla la sezione performance:

http://code.google.com/appengine/kb/java.html

Nel vostro caso di avere piccole dati disponibili, se statica allora si può caricare in memoria avvio di una nuova istanza. Se si tratta di dati dinamici, dovresti salvarlo nel database usando la loro API.

La mia raccomandazione per mantenere un esempio GAE vivo, o pagare per il servizio Always-On o seguire le mie raccomandazioni per l'utilizzo di un cron qui:

http://rwyland.blogspot.com/2012/02/keeping-google-app-engine-gae-instances.html

io uso quello che io chiamo un "primo programma" di un cron job di 3, 7, 11 minuti.

+0

Il periodo di tempo tra l'inizializzazione dell'app e la creazione di un nuovo processo è inferiore a 1 minuto, quindi il problema probabilmente è diverso dall'app che viene chiusa a causa del mancato utilizzo in un momento. – ThePiachu

+2

Sempre attivo non aiuta se si dispone di una progettazione errata che prevede di poter salvare lo stato nella RAM tra le richieste. Puoi continuare a eseguire dozzine di istanze contemporaneamente mentre aumenti la scalabilità per gestire un sacco di traffico e non condividono lo stato. – geoffspear

+0

@ThePiachu Accedi al sito Appengine e guarda le tue istanze e accedi. Probabilmente vedrai che dopo circa 5-10 minuti di inattività, l'istanza in esecuzione si spegne. GAE è una piattaforma scalabile: se non la usi, perché sprecare le risorse? – rwyland

12

Ti rendi conto che GAE è una soluzione di hosting cloud che gestisce automaticamente le istanze in base al carico? Questa è la caratteristica principale e la ragione per cui la gente lo sta usando.

Quando il carico aumenta, GAE crea una nuova istanza, che, naturalmente, ha tutte le variabili RAM vuote.

La soluzione non prevede che le variabili siano disponibili o le memorizzino in una memoria permanente alla fine della richiesta (sessione, memcache, datastore) e le caricheranno se non presenti all'inizio della richiesta.

2

Si consiglia di utilizzare Backends se si desidera eseguire istanze con memoria residente di lunga durata.

+0

I backend sono ora privati. Qualche altro suggerimento? – Ajai

Problemi correlati