Ich aktualisiere Produktions-Hardware, und wir sehen viel mehr junge Generation GCing auf dem neuen Satz von Kit im Vergleich zu den alten.Erhöht die Anzahl der verfügbaren Kerne und RAM die JVM mehr GCs?
Das gleiche Programm läuft auf beiden Rechnern (identische Binaries). Ein offensichtlicher Unterschied (ich hoffe, dass dies für die JVM keinen Unterschied macht) ist, dass wir RHEL5 -> RHEL6 aufgerüstet haben.
Unsere JVM (Java 64-Bit-Hotspot 1.6, gleiche java -version
auf beide) läuft mit den gleichen Befehlszeile GC Optionen:
-XX:+PrintGC -XX:+PrintGCDetails -XX:+PrintGCTimeStamps -XX:+UseParallelGC -XX:+UseCompressedOops
auch:
-Xmx1024M -Xms1024M -XX:NewSize=512M -XX:SurvivorRatio=2
Der Unterschied zwischen der Maschinen ist, dass die neue Box hat etwa doppelt so viel RAM (32gb
- obwohl die maximale Heap unverändert ist) und einige weitere Kerne (24 vs. 16).
Die Anwendung selbst verbindet sich mit mehreren externen Prozessen und führt viele Netzwerkoperationen aus - so könnte eine Regression, Fehlkonfiguration oder Inkompatibilität anzeigen (deshalb testen wir ...). Was ich gerne wissen würde ist:
Ist ein erhöhtes Niveau von Young-Gen GC wahrscheinlich eine natürliche und erwartete Folge von mehr Kernen laufen, oder sollte ich über diese Entwicklung besorgt sein?
Wir bestätigten die Anzahl der GCs in JConsole, aber das ist ungefähr das Gleiche wie zu tun:
grep "PSYoungGen" ./log | wc -l
(beachten Sie -XX:+PrintGC -XX:+PrintGCDetails
)
Voll GCs auf beiden Boxen gleich aussehen zu.
Hinweis: Dies ist die Anzahl der GCs während des gesamten Startprozesses der Anwendung - es führt also nicht "mehr Arbeit" aus. Es ist die gleiche Arbeit, mit mehr GC-Läufen.
Ich frage mich zum Beispiel, ob -XX:+UseParallelGC
zu viel mehr Einträge im Protokoll führen würde, weil mehr Threads verwendet wurden (hacken die Young-Gen-Sammlungen in kleinere Stücke, bedeutet mehr, kleinere Sammlungen - nicht etwas zu beunruhigen Über).
Weitere Cores -> mehr Computing pro Sekunde -> mehr GC pro Sekunde. –
Gleiche JVM auf beiden Maschinen? (1.6x64) – assylias
@assylias Gleiche JVM auf beiden (aktualisierte Frage). – jelford