Ho un'applicazione Java ad alto volume che gestisce un carico costante di 50000 msgs/sec. Si è sintonizzato per alta produttività utilizzando le seguenti impostazioni:Perché i tempi del GC aumentano costantemente su un'app Java ad alto volume di esecuzione elevata?
-Xmx3g -Xms3g XX: newSize = 2g -Xss128k XX: SurvivorRatio = 6 XX: TargetSurvivorRatio = 90 -XX: + UseParallelGC -XX: ParallelGCThreads = 12 -XX: + UseParallelOldGC -XX: + HeapDumpOnOutOfMemoryError
Sto scoprendo che i tempi di GC giovani aumentano costantemente di 50ms quando inizia a 200ms entro la fine della giornata, anche se la frequenza delle corse GC rimane la stessa.
Se provo la stessa esecuzione utilizzando il raccoglitore ParNewGC, i tempi del GC aumentano molto più rapidamente. Qualcuno ha qualche idea su questo problema?
Nel corso del tempo peggiora nel tempo il giorno successivo, ad esempio, vai più di 200 ms o stai riavviando l'app ogni giorno? – JoseK
Un'ipotesi, ma non è solo un effetto collaterale di NewSize che è davvero grande? GC-ing su 2 gig di oggetti sembra che ci vorrebbe un po '. – wds