2016-04-22 14 views
6

Ho un server con memoria da 72 GB in esecuzione, è stato utilizzato Java 7 con GC parallelo e dimensioni heap in 25G. Ma dopo il passaggio a Java 8, un'attività particolare diventa molto più lenta. In pratica, l'attività legge un file di circa 15 GB in memoria e aggiorna alcuni dati rilevanti nel DB. Di solito ci vuole circa un'ora per completare il lavoro, ma dopo Java 8, diventa 1,5 ore.GC in Java 8 diventa ovviamente più lento rispetto a Java 7

ho provato:

  1. Aumentare la dimensione heap a 50 GB => non aiuta
  2. algoritmo
  3. Variazione GC da parallelo a CMS, diventa ancora più lento (1,8 ore)

Quindi io sono non so da dove posso iniziare a dare un'occhiata, la libreria java per eseguire l'attività è ancora compilata in Java 7 ma non sono sicuro se questo sia rilevante? Dopo il passaggio a Java 7, le prestazioni sono appena tornate.

+0

Hai eseguito un profiler contro la tua applicazione? Quali librerie di terze parti stai usando per caricare questo file? –

+0

L'ultimo Java 7? L'implementazione se le sottostringhe sono cambiate! Prova a confrontare i benchmark tra i due per vedere dove è andata la performance. –

+0

Qualsiasi cosa impieghi tanto tempo trarrebbe beneficio dalla profilazione. (Qualsiasi cosa che richiede più di un minuto dovrebbe essere profilata IMHO) –

risposta

2

Per confrontare/trovare problema GC, è meglio attivare la registrazione GC:

  • -XX: + PrintGCDetails -XX: + PrintGCTimeStamps -Xloggc: logs/gc.log

e l'uso GCViewer per analizzare/visualizzare i file di registro GC. Sarà utile se raccogli il registro di GC e lo allega alla domanda.

In teoria (e pratica), Java 8 è più veloce di Java 7. Hai menzionato che Java scrive i dati in DB. Può valere la pena analizzare il consumo delle risorse di entrambi, potrebbe essere DB la causa principale.

+0

Ciao, vorrei dare un'occhiata a questo grazie per queste bandiere! –