2016-04-22 4 views
6

Ich habe einen Server mit 72 GB Speicher ausgeführt, es war Java 7 mit parallelen GC und Heap-Größe in 25G verwenden. Aber nach dem Wechsel zu Java 8 wird eine bestimmte Aufgabe viel langsamer. Die Aufgabe liest im Grunde eine Datei um 15 GB im Speicher und aktualisiert einige relevante Daten in DB. Es dauert normalerweise ungefähr eine Stunde, um den Job zu beenden, aber nach Java 8 wird es 1,5 Stunden.GC in Java 8 deutlich langsamer im Vergleich zu Java 7

Ich habe versucht:

  1. Zunahme Heap-Größe zu 50GB => nicht
  2. ändern GC-Algorithmus von parallel zu CMS helfen, es wird noch langsamer (1,8 Stunden)

Also ich bin Ich bin mir nicht sicher, wo ich anfangen kann, einen Blick darauf zu werfen, aber die Java-Bibliothek zum Ausführen der Aufgabe ist noch in Java 7 kompiliert, aber ich bin mir nicht sicher, ob dies relevant ist. Nach dem Wechsel zu Java 7 kam die Leistung gerade zurück.

+0

Haben Sie einen Profiler für Ihre Anwendung ausgeführt? Welche Bibliotheken von Drittanbietern verwenden Sie, um diese Datei zu laden? –

+0

Das neueste Java 7? Die Implementierung, wenn Teilstrings geändert wurden! Versuchen Sie Benchmarks zwischen den beiden zu vergleichen, um zu sehen, wohin die Leistung ging. –

+0

Alles, was so lange dauert, würde vom Profiling profitieren. (Jede Sache dauert länger als eine Minute sollte IMHO profiliert werden) –

Antwort

2

Zum Vergleich/GC Problem zu finden, ist es besser, GC-Protokollierung zu aktivieren:

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

und Verwendung GCViewer zum Analysieren von GC-Protokolldateien. Es wird nützlich sein, wenn Sie GC-Protokoll sammeln und an Frage anhängen.

In der Theorie (und Praxis) ist Java 8 schneller als Java 7. Sie haben erwähnt, dass Java Daten in die DB schreibt. Es kann sich lohnen, den Ressourcenverbrauch von beiden zu analysieren, möglicherweise liegt DB an der Wurzel.

+0

Hallo, ich würde mir diesen Dank für diese Fahnen ansehen! –

Verwandte Themen