Was würde dazu führen, dass ein Java-Prozess das Xmx- oder Xss-Limit deutlich überschreitet?
Ich habe 7 verschiedene Java-Daemons, die ich (alle 7) auf 3 verschiedenen Servern laufen lasse. Die Java-Befehlszeile hat -Xmx2048m und -Xss1024k. Auf diesen 3 Servern werden bei allen 21 Prozessen knapp 2,5 GB für die VIRT-Größe oben und oben angezeigt. Die Größe der RES variiert je nach Daemon zwischen 300 und 1,9 GB.
Das ist alles wie es sein sollte.
Geben Sie den neuen Server ein. Schnellere CPU, mehr RAM (16 GB statt 8 GB), etwas neueres Java (1.6.0_10-b33 auf den alten Servern, 1.6.0_31-b04 auf den neuen Servern). Beide Systeme (und JVMs) sind 64-Bit.
2 der Daemons wurden auf den neuen Server verschoben. Auf dem neuen Server verbrauchen die Daemons bei gleicher Aufgabe erheblich mehr CPU (etwa den Wert eines Kerns) und erledigen weniger. (Von 5110 Prozessoren auf den alten Systemen auf 5620 Prozessoren auf dem neuen System verschoben).
Ziemlich viel mehr CPU-Auslastung (GC-Thread ??) und Berichterstattung über 5 GB VIRT und 2 GB RES für einen Dämon und 10,5 GB VIRT und 2 GB RES für den anderen Dämon.
Irgendwelche Ideen, die Java veranlassen würden, die Speichergrenzen zu ignorieren (oder zu ignorieren scheinen, wenn dies der Fall ist)?