Erstellen kann die JVM mit -XX:+UseLargePages aktiviert

Ich habe ein Java service, der läuft momentan mit einer 14GB heap. Ich bin begierig darauf, zu versuchen, die -XX:+UseLargePages option, um zu sehen, wie könnte dies Auswirkungen auf die Leistung des Systems. Habe ich so konfiguriert das Betriebssystem wie beschrieben von Oracle mit entsprechenden shared-memory und Seite Werte (diese kann auch berechnet werden mit ein online-tool).

Wenn das Betriebssystem konfiguriert ist, kann ich sehen, dass es ordnet die zu erwartende Menge an Speicher als riesige-Seiten. Jedoch, dem Start der VM mit der -XX:+UseLargePages option gesetzt, stets Ergebnisse in einer der folgenden Fehler:

Wenn -Xms /-Xmx ist fast gleich an die große Seite-Zuordnung:

    Failed to reserve shared memory (errno = 28). //'No space left on device'

Wenn -Xms /-Xmx ist weniger als die große Seite-Zuordnung:

    Failed to reserve shared memory (errno = 12). //'Out of memory'

Ich wollte versuchen die Einführung einiger Spielraum - also auf einer 32-GB-system, das ich reserviert 24 GB shared memory und hugepages zur Verwendung mit einer JVM-Konfiguration mit einem 20-GB-Haufen, von denen nur 14GB werden derzeit genutzt. Ich habe auch verifiziert, dass der Benutzer die Ausführung der JVM hat die Gruppe Rechte, die im Einklang mit /proc/sys/vm/hugetlb_shm_group.

Kann jemand mir einige Hinweise, wo ich vielleicht schief geht und was könnte ich als Nächstes versuchen?

Zuweisungen/Nutzung:

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

Umgebung:

  • Memory System - 32GB
  • System Seite Größe - 2048KB
  • debian 2.6.26-2-amd64
  • Sun JVM 1.6.0_20-b02

Lösung

Dank @jfgagne für die Bereitstellung einer Antwort, zu einer Lösung führen. Zusätzlich zu den
/proc/sys/kernel/shmall
Einstellung (angegeben als 4KB-Seiten), hatte ich Einträge hinzufügen, um /etc/security/limits.conf wie beschrieben auf Thomas' blog. Allerdings, wie Sie meine Anwendung gestartet wird mit jsvc hatte ich auch zum duplizieren der Einstellungen für den Benutzer root (beachten Sie, dass die Grenzwerte sind angegeben in KB):

    root       soft memlock 25165824
    root       hard memlock 25165824
    pellegrino soft memlock 25165824
    pellegrino hard memlock 25165824

Es ist auch erwähnenswert, dass Einstellungen können getestet werden schnell durch starten der JVM mit der -version argument:

    java -XX:+UseLargePages -Xmx20g -version
  • Tolle doc zu diesem Thema unter dataforte.net/blog/2010/03/12/... Sie könnten, statt der Festlegung von Grenzwerten für root, Bearbeiten Sie /etc/pam.d/su und /etc/pam.d/sudo und sicherzustellen, dass Sie die folgende Zeile enthalten, so dass die oben genannten Speicher-Grenzen angewendet werden: session required pam_limits.so
InformationsquelleAutor teabot | 2012-06-27
Schreibe einen Kommentar