Ich habe einen Java-Dienst, der derzeit mit einem 14-GB-Heap ausgeführt wird. Ich möchte die -XX: + UseLargePages ausprobieren Option, um zu sehen, wie dies die Leistung des Systems beeinflussen könnte. Ich habe das OS wie beschrieben von Oracle mit entsprechendem gemeinsam genutzten Speicher konfiguriert und Seitenwerte (diese können auch mit einem Online-Tool berechnet werden).
Sobald das Betriebssystem konfiguriert ist, kann ich sehen, dass es die erwartete Menge an Speicher als große Seiten zuweist. Das Starten der VM mit der Optionsgruppe -XX:+UseLargePages
führt jedoch immer zu einem der folgenden Fehler:
Wenn -Xms
/ -Xmx
fast der großen Seitenzuweisung entspricht:
Wenn -Xms
/ -Xmx
kleiner ist als die große Seitenzuweisung:
Ich habe versucht, etwas Spielraum zu schaffen - also habe ich auf einem 32GB-System 24 GB Shared Memory und ruggigpages zugewiesen, um sie mit einer JVM zu verwenden, die mit einem 20-GB-Heap konfiguriert ist, von dem derzeit nur 14 GB genutzt werden. Ich habe auch überprüft, dass der Benutzer, der die JVM ausführt, Gruppenrechte hat, die mit /proc/sys/vm/hugetlb_shm_group
übereinstimmen.
Kann mir jemand Hinweise geben, wo ich vielleicht schief gehe und was ich als nächstes versuchen könnte?
-Xms
/ -Xmx
- 20GB /proc/sys/kernel/shmmax
- 25769803776 (24GB) /proc/sys/vm/nr_hugepages
- 12288 Danke an @jfgagne für eine Antwort, die zu einer Lösung führt. Zusätzlich zu der Einstellung
/proc/sys/kernel/shmall
(angegeben als 4KB-Seiten) musste ich Einträge zu /etc/security/limits.conf
hinzufügen, wie auf dem Blog von Thomas beschrieben . Da meine Anwendung jedoch mit jsvc
gestartet wurde, musste ich auch die Einstellungen für den Benutzer root duplizieren (beachten Sie, dass die Grenzwerte in KB angegeben sind):
Erwähnenswert ist auch, dass Einstellungen schnell getestet werden können, indem die JVM mit dem Argument -version
gestartet wird:
Wenn Sie riesige Seiten mit Java verwenden, gibt es nicht nur den Heap, der große Seiten verwendet, sondern auch das PermGen: vergessen Sie nicht, Speicherplatz dafür zu reservieren. Es scheint, das ist der Grund, warum Sie eine andere Fehlermeldung haben, wenn Sie Xmx
nahe der Menge an großen Seiten setzen.
Es gibt auch den shmall
-Kernelparameter, der gesetzt werden muss, den Sie nicht erwähnt haben, vielleicht ist es das, was Sie blockiert. In Ihrem Fall sollten Sie es auf 6291456 einstellen.
Das letzte, was man sagen sollte: Bei Verwendung riesiger Seiten wird der Parameter Xms
nicht mehr verwendet: Java reserviert alle Xmx
im gemeinsamen Speicher mit großen Seiten.
Tags und Links jvm large-object-heap debian huge-pages jvm-arguments