2014-05-21 11 views
6

Possiedo un'applicazione Java di App Engine che viene eseguita su istanze F1 scalate automaticamente (600 Mhz, 128 MB di RAM). Dopo il riscaldamento, l'utilizzo della memoria per istanza, come mostrato dal dashboard, rimane a circa 220 MB. Secondo lo docs, questo include "sovraccarico di runtime".Come analizzare l'utilizzo effettivo della memoria su App Engine Java?

  • Ho ragione di ritenere che questo numero rifletta la dimensione massima di permgen e di heap, ma non necessariamente quella effettivamente utilizzata? Non ho mai ricevuto un errore di memoria esaurita.
  • Qual è il modo migliore per analizzare l'utilizzo della memoria nell'ambiente di produzione? Esiste un modo per eseguire un heap dump nonostante le restrizioni di runtime di App Engine?

analisi locale utilizzando, ad esempio, VisualVM non fornisce un quadro accurato dal momento che include le versioni server di sviluppo, in memoria del Datastore e Memcache, ecc In totale, si aggiunge fino a 8.000 classi caricate (compresi il server di sviluppo, le mie classi e circa 85 librerie), una dimensione permgen risultante di 50 MB e una dimensione heap minima di 50 MB dopo una raccolta dati obsoleta completa.

Un po 'di sfondo sulla mia domanda: lo schedulatore a volte (spesso durante le prime poche richieste successive al completamento di un normale processo di sincronizzazione) avvia una nuova istanza per elaborare un carico di richiesta che viene solitamente gestito da una sola istanza. Dopo alcune altre richieste, tutte le richieste verranno nuovamente indirizzate interamente e coerentemente alla prima istanza. In base all'insieme delle regole dello scheduler delineato here, sto cercando di capire se questo comportamento potrebbe essere dovuto allo scheduler che prevede una mancanza (temporanea) di memoria di istanza per elaborare richieste aggiuntive.

risposta

0

Qual è il modo migliore per analizzare l'utilizzo della memoria nell'ambiente di produzione? Esiste un modo per eseguire un heap dump nonostante le restrizioni di runtime di App Engine?

Non c'è un buon modo. La strumentazione non è ben supportata.