2012-10-05 4 views
8

Il mio lavoro back-end funziona sulla base del cron job (ogni 4 ore). Ma termina senza elaborare i dati. I display di log del server come segue:GAE: processo terminato perché il back-end impiegava troppo tempo per arrestarsi nel lavoro backend

500 15377121ms 0kb instance=0 AppEngine-Google; (+http://code.google.com/appengine) 
E 2012-10-05 01:50:18.044 Process terminated because the backend took too long to shutdown. 

come gestire questo tipo di errore nel mio programma

risposta

5

Tale errore viene generato quando App Engine ha bisogno di chiudere il vostro back-end verso il basso, ma il backend non riesce ad uscire entro 30 secondi . Alcuni motivi per cui questo potrebbe accadere sono elencati here. A seconda del tipo di errore, App Engine potrebbe inviare al tuo back-end una notifica dell'arresto imminente, quindi è una buona idea per register a shutdown handler in modo da poter raccogliere più dati sullo stato della tua app quando questo sta per succedere.

Se lo vedi regolarmente, probabilmente c'è una spiegazione sistematica, come la memoria del tuo lavoro che supera il massimo per la classe del backend.

+0

L'aggiunta del gestore di sutdown non ha aiutato la mia app. Sto usando python2.7 webapp con un back-end. Appengine mostra questo messaggio nei log il 95% delle volte. Il gestore è stato invocato solo 2-4 volte nell'ultima settimana. Quando è stato richiamato, il backend ha funzionato fino alla fine. La registrazione della memoria e l'utilizzo del processore mostrano i limiti entro i limiti. Non è garantito che i gestori di shutdown vengano chiamati come da un google io talk sui backend. –

0

Gestire lo stesso problema. Ha esaminato le cause elencate nei documenti ufficiali. Il consumo di memoria sembra ok dalle statistiche. Anche i problemi di contesa del datastore vengono gestiti nel mio codice. Anche i timeout. Cambiare il meccanismo delle attività per lavorare in blocchi recuperabili sembra l'unica via d'uscita.

Dopo aver inseguito questo errore per qualche ora, sembra che il paradigma di sviluppo di AppEngine ruoti attorno ai gestori di url con limitazioni di tempo, memoria ecc. Questo è applicabile anche alle attività di lunga durata. Ho rifatto il mio compito a lungo termine per eseguire piccoli compiti. Le code delle attività hanno attivato attività più piccole che si avviano, prima di finire in coda l'attività successiva. Mai fallito neanche una volta!

Il vantaggio è che taskqueuus ha un fail-safe/handover migliore di un semplice cron job. Un fallimento dell'attività non significa che il resto dell'enorme elenco di attività abbia esito negativo.