JVM kann nicht mit -XX: + UseLargePages aktiviert erstellt werden

8

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:

%Vor%

Wenn -Xms / -Xmx kleiner ist als die große Seitenzuweisung:

%Vor%

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?

Zuordnungen / Verwendung:

  • -Xms / -Xmx - 20GB
  • Benutzter Heap - 14GB
  • /proc/sys/kernel/shmmax - 25769803776 (24GB)
  • /proc/sys/vm/nr_hugepages - 12288

Umgebung:

  • Systemspeicher - 32 GB
  • Systemseitengröße - 2048 KB
  • debian 2.6.26-2-amd64
  • Sun JVM 1.6.0_20-b02

Lösung

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):

%Vor%

Erwähnenswert ist auch, dass Einstellungen schnell getestet werden können, indem die JVM mit dem Argument -version gestartet wird:

%Vor%     
teabot 27.06.2012, 16:15
quelle

1 Antwort

7

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.

    
jfg956 28.06.2012, 09:22
quelle