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:
- Zunahme Heap-Größe zu 50GB => nicht
- ä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.
Haben Sie einen Profiler für Ihre Anwendung ausgeführt? Welche Bibliotheken von Drittanbietern verwenden Sie, um diese Datei zu laden? –
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. –
Alles, was so lange dauert, würde vom Profiling profitieren. (Jede Sache dauert länger als eine Minute sollte IMHO profiliert werden) –