2013-03-04 11 views
7

Ho sviluppato un'applicazione per client che utilizza Play framework 1.x e funziona su GAE. L'app funziona alla grande, ma a volte è pazzesca. Ci vogliono circa 30 secondi per caricare una pagina semplice, ma a volte funziona più velocemente - nessun cambio di codice.Identifica il motivo per cui il motore dell'app Google è lento

C'è un modo per identificare perché è lento? Ho provato a contattare l'assistenza ma non sono riuscito a trovare alcun numero di telefono o e-mail. Inoltre non c'è risposta sul gruppo google ufficiale.

Come affronteresti questo problema? Attualmente il mio cliente è molto arrabbiato a causa del tempo di caricamento lento, ma il passaggio ad altro provider è l'ultima opzione al momento.

+0

Si sta utilizzando master/slave o replica elevata per il datastore? –

+0

Ciao, sto usando la replica alta – FrEaKmAn

+0

chiedendo: stai monitorando il carico del sito/GC/cronometrando il tuo codice? Se sì, come? –

risposta

0

È un'applicazione a pagamento? Quando non si paga per un'applicazione, le istanze hanno una durata molto breve.

+1

È un'applicazione a pagamento. Comprendo l'avvio lento, è normale. Sto parlando di quando l'app è già in esecuzione. – FrEaKmAn

+0

quindi vuoi dire una seconda richiesta dopo che l'istanza è stata caricata? quante istanze ci sono in questo momento? solo uno, o ce ne sono altri? e controlla anche quante istanze hai un minimo inattivo. –

+0

Ho impostato tutto in automatico e Google ha deciso di decidere cosa è meglio. Poche volte ho controllato ed era in esecuzione 4 istanze .. – FrEaKmAn

8

Utilizzare GAE Appstats per definire le chiamate della procedura remota. Tutti gli RPC sono lenti (Google Cloud Storage, Google Cloud SQL, ...), quindi se è possibile ridurre la quantità di RPC o utilizzare alcune strutture dati di cache, usali -> la tua applicazione sarà molto più veloce. Ma puoi vedere con appstats quali parti sono lente e se hanno bisogno di attenzione :).

Per esempio, ho creato un cache di Google Cloud Storage per la mia domanda e diminuito il tempo di esecuzione da 2 minuti a meno di 30 secondi. Gli RPC sono un collo di bottiglia nel GAE.

0

Effettuando almeno un istanza permanente, si ottiene un notevole miglioramento nel primo utilizzo. Ci vogliono circa 15 secondi. per caricare l'applicazione nell'istanza, che è il motivo per cui si verificano i tempi di richiesta lunghi, quando nessuno è stato utilizzando l'applicazione per un po '

+1

Sono a conoscenza del tempo di avvio. Come ho detto, funziona lentamente su intervalli casuali. – FrEaKmAn

+0

Sei sicuro che non lo è perché una nuova istanza è in fase di avvio. A seconda delle impostazioni dell'applicazione nella console di GAE, puoi avere un impatto negativo sulla tua app in base alle impostazioni. Ci sono stati diversi discorsi su questo e sugli articoli, ma non riesco a trovarli subito. È inoltre possibile utilizzare le richieste di riscaldamento. – therewillbesnacks

2

La combinazione di alcune risposte e l'aggiunta di un paio di cose da controllare:

  1. Debug utilizzando le statistiche dell'app. Cerca situazioni "scala" e chiamate RPC. Forse qualcosa nella tua app sta attivando chiamate RPC in determinati punti che non si verificano sempre nella tua logica.

  2. Modificare le impostazioni dell'istanza. Aggiungi alcune istanze permanenti/residenti e vedi se questo fa la differenza. Se crei nuove istanze, le cose saranno lente, probabilmente per tutto il tempo (30 secondi o più) che descrivi. Sembrerà casuale. Non è solo il numero di istanze, ma quali combinazioni dei cursori si utilizzano (in realtà si può ferire con troppo poco/molti).

  3. Guarda la tua app stessa. Stai facendo molte allocazioni di memoria nella JVM? L'allocazione/liberazione della memoria è intrinsecamente un'operazione lenta e può causare il blocco. Sei sicuro che il tuo congelamento non sia un problema JVM? Prova a replicare il problema localmente e modifica le impostazioni di xmx e xms di JVM e verifica se trovi un comportamento simile. Profili anche la tua applicazione localmente per problemi di memoria/prestazioni. È possibile ridurre le allocazioni che utilizzano il pool, contenitori DI, ecc

  4. Stai usando ogni sorta di cron posti di lavoro/elaborazione sui server front-end? Cerca di spostarti il ​​più possibile verso attività in background come l'invio di email. Gli intervalli possono sembrare casuali, ma possono essere il risultato di cose che accadono a seconda delle impostazioni del lavoro. Le 9 di ogni giorno potrebbero non significare ciò che pensate in base alle opzioni cron/task. Un corollario: sposta le cose sui server back-end e tira le code.

È difficile dare una buona risposta senza ulteriori informazioni. Il migliore che qualcuno possa fare è darti un punto di partenza, che praticamente ogni risposta ha già.

1

Google in genere non fornisce un supporto per i contatti per molti servizi. Il problema descritto a proposito della lentezza del motore dell'app Google è probabilmente causato da un avvio a freddo. Le istanze front-end del motore di app di Google si interrompono dopo circa 15 minuti. È possibile scrivere un cron job per eseguire il ping delle istanze ogni 14 minuti per mantenere i nodi attivi.

Problemi correlati