Di tanto in tanto, da qualche parte tra una volta ogni 2 giorni a una volta ogni 2 settimane, la mia domanda si blocca in una posizione apparentemente casuale nel codice con: java.lang.OutOfMemoryError: GC overhead limit exceeded
. Se I google questo errore vengo a this SO question e che mi portano a this piece of sun documentation che expains:Durata eccessiva GC Tempo in "java.lang.OutOfMemoryError: limite di testa GC superato"
The parallel collector will throw an OutOfMemoryError if too much time is being spent in garbage collection: if more than 98% of the total time is spent in garbage collection and less than 2% of the heap is recovered, an OutOfMemoryError will be thrown. This feature is designed to prevent applications from running for an extended period of time while making little or no progress because the heap is too small. If necessary, this feature can be disabled by adding the option -XX:-UseGCOverheadLimit to the command line.
Il che mi che la mia domanda è apparentemente spendendo il 98% del tempo totale di garbage collection dice di recuperare solo il 2% del mucchio.
Ma il 98% di che ora? Il 98% delle intere due settimane in cui è stata eseguita l'applicazione? Il 98% dell'ultimo millisecondo?
Sto cercando di determinare un approccio migliore per risolvere questo problema piuttosto che utilizzare semplicemente -XX:-UseGCOverheadLimit
ma sento la necessità di comprendere meglio il problema che sto risolvendo.
Dalla documentazione, sembra essere il 98% delle 2 settimane intere. Hai abilitato i registri GC con questi flag -verbose: gc -XX: + PrintGCDetails XX: + PrintGCTimeStamps -Xloggc: PATH_FROM_ROOT/gclog.log. Sarebbe bello vedere l'ora di esecuzione dell'app e il tempo di arresto dovuti a GC. – JoseK
La registrazione GC è un bel suggerimento, ci proverò. Il 98% delle 2 settimane sembra improbabile, ma hai ragione, questo è ciò che implicano i documenti. Spero che sia solo la scrittura imprecisa –
Hai scoperto il significato del 98% del tempo? La mia opinione è che GC dovrebbe occuparsi del 98% dell'utilizzo delle applicazioni nel momento stesso in cui si verifica l'eccezione e non per le 2 settimane. –