2015-07-23 32 views
5

Un processo java che sto eseguendo funziona in modo coerente nella prima ora o in modo che funzioni. Tuttavia, le prestazioni si degradano rapidamente. Quando profiling ho scoperto che la raccolta dei rifiuti metaspace accaduto abbastanza spesso fino a quando il segno di un'ora e poi ha ottenuto fuori controllo:Java 8 metaspace garbage collection

enter image description here

Sono abbastanza sicuro che sarò in grado di risolvere questo problema utilizzando il XX: Opzione MaxMetaspaceSize. Tuttavia, mi piacerebbe sapere di più sul perché questo comportamento potrebbe verificarsi. Non riesco a immaginare perché l'algoritmo di garbage collection si comporti in questo modo. Qualcuno ha una spiegazione o un consiglio su una soluzione migliore? Grazie

+0

Penso che tu abbia utilizzato un framework che genera classi in RunTime. E alla fine diventa fuori controllo. La soluzione dipende dal framework che usi. – talex

+0

Grazie, e sì, lo sono. Mi è venuto in mente, ma il ritmo con cui vengono generate le classi non sembra cambiare. Tutto ciò che sembra cambiare è che la frequenza del gc diminuisce. – user1675642

+0

Probabilmente è un'euristica JVM. Cerchiamo di trovare parametri migliori come la dimensione massima. Inoltre è simile all'effetto stroboscopico. Dimensione del metaspazio misurata in un determinato momento. Quando la frequenza di GC è all'incirca uguale alla frequenza di misurazione, possono verificarsi alcuni effetti strani. – talex

risposta

3

Puoi provare a impostare -XX:MaxMetaspaceExpansion=0. Ciò dovrebbe forzare un GC completo - rilasciando metodi/dati di classe creati dinamicamente - prima di tentare di far crescere il metaspazio. Inoltre, puoi provare a impostare MaxMetaspaceFreeRatio su un valore inferiore rispetto a quello predefinito per ridurre ulteriormente lo stesso metaspace dopo un GC.

Vedere this answer per altre opzioni relative a metaspace.

La raccolta Metaspace si basa sulle classi scaricate dal garbage collector. Quindi, a seconda del GC che si sta utilizzando, ritoccare che recuperare i rifiuti prima potrebbe anche aiutare.