Frage

Diese Frage bezieht sich auf So starten Java Weigert - Nicht genügend Speicherplatz für Object Heap Resrve könnte und sollte leicht genug sein, um herauszufinden. Jedoch; Meine Suchen haben nichts nützlich ergeben.

Im Wesentlichen haben wir 2 32-Bit-OS (RedHat und SuSE) auf verschiedene Maschinen mit der gleichen Hardware. Beide verwenden die gleiche JVM beide die gleiche Befehlszeile ausgeführt werden. RedHat arbeitet völlig in Ordnung, aber SuSE meldet nicht genügend Speicher vorhanden ist.

Wir müssen nur wissen, ob dies eine Einschränkung der Version von SuSE ist wir verwenden oder wenn es etwas anderes.

'cat / proc / version' gibt uns:

Linux version 2.6.5-7.244-bigsmp (geeko@buildhost) (gcc version 3.3.3 (SuSE Linux)) #1 SMP Mon Dec 12 18:32:25 UTC 2005

'uname -a' gibt uns die folgenden auf beiden Arten von Maschinen:

UTC 2005 i686 i686 i386 GNU/Linux
War es hilfreich?

Lösung

Das JVM Speicherlimit ist die größte freie zusammenhängende Block verfügbar, nicht die Menge an freiem Speicher bezogen. Die Grenze variiert von etwa 1,4 GB auf etwas mehr als 2,0 GB, und hängt davon ab, wo Sie Ihr Betriebssystem verschiedene Dinge in Erinnerung bringt. Ich weiß nicht, die Angaben von wo Redhat oder Suse Last Sachen in dem Speicher, aber es könnte, dass suse seines kartiert eine Bibliothek an eine Adresse in der Mitte des RAM, wo Redhat es am Ende der Karte könnte (Spekulieren).

Und denken Sie daran, dass Ihre tatsächliche Speichernutzung in Java ist mehr als , was Sie für Xmx angeben. Die anderen Speichereinstellungen wirken sich auch auf die Größe des Heap (wie Permgen). So könnte es auch sein, dass der zul Raum auf Suse einen larget Standard hat als auf Redhat.

Auch in Abhängigkeit von der Speicherzuordnung Profil Ihrer Anwendung können Sie auch mit einer kleineren Heap-Größe und verschiedenen Müll sammeln Optionen weg. Es gibt einige Details hier ( http://java.sun.com/performance/ Referenz / White Papers / tuning.html ) und andere Orte. Zum Beispiel, wenn Sie eine Menge von kleinen, temporären Blöcken zuweisen, werden Sie als verschiedene GC-Einstellungen mögen, wenn Sie eine Menge von Bit langlebigen Objekten.

In Bezug auf die Frage verknüpft, warum nicht nur Redhat verwenden? Das könnte eine vereinfachende Lösung sein, aber ich garantiere, es wird Ihr Problem schneller zu beheben, als tief in die obskure Welt der Java-Tuning einzutauchen und OS Speicherverwaltung: P

Andere Tipps

Zum einen sind Sie verrückt über einen 32-Bit-Betriebssystem ausgeführt werden, wenn Sie diese viel Adressraum Druck haben. Migrieren zu einem 64-Bit-JVM auf 64-Bit-Linux. Wie viel Zeit haben Sie schon verschwendet versuchen, dieses Problem zu diagnostizieren, die Sie von Anfang an vermutet haben müssen würde mit dem größeren Adressraum eines 64-Bit-System gehen weg?

Zum anderen ist es bekannt, dass aus allen Linux-Anbieter Red Hat hat die meisten Kernel-Ingenieure auf die Mitarbeiter und macht einige gravierende Verbesserungen für die Kerne in ihrer RHEL Produkte. Diese enthalten oft Patches für große Workloads wie das Ihre (na ja, es ist eine große Arbeitsbelastung für ein 32-Bit-System, es ist nichts Besonderes auf 64-Bit). Also gibt es eine gewisse Chance letztlich der Grund dafür ist, dass RHEL andere Kunden, die die gleiche verrückte Sachen, wie Sie hat und Sie profitieren von Arbeit, die sie haben, um diese Kunden zu unterstützen.

Schließlich obwohl, da ich vermute, Sie gehen zu versuchen, einen Weg zu beharren zu finden, dies ich out werde Punkt auf 32-Bit SuSE Linux zu tun, dass eine Vielzahl von Adressraum Abwägungen auf 32-Bit-x86 bietet, und es ist möglich (aber nicht sicher), dass Ihre SuSE Systeme haben nur eine andere Kompromiss ausgewählt. Wenn Sie die Konfiguration der Laufkerne bringen kann (oft in / boot / config ....), dann können Sie Einstellungen wie HIGHMEM vergleichen.

Die konventionelle Option bis vor ein paar Jahren war 2: 2 geteilt, dass User-Space zu 2GiB Adressraum begrenzt ist, eine einfache Lösung zu programmieren, und es hat ordentliche Effizienz aber in diesem Szenario offensichtlich kann man nicht hat Ihren Wunsch 1 (ähnlich dem Windows-Option / 3GB), die auf Kosten der pauken den OS-Kernel selbst in weniger User-space-Adressraum erweitert: Haufen, da es keinen Platz für den Programmtext, Stapel usw. in jüngerer Zeit der Trend für 3 war verlassen würde Raum, der möglicherweise seine eigenen Probleme verursacht. Dies könnte funktionieren, aber es wäre sehr eng, so würde ich auch nicht überrascht, wenn es nicht für Ihre Jobs nicht funktioniert. Schließlich neuerer Linux-Kernels auch eine Option anbieten, wo Sie 4GiB 32-Bit-User-Space bekommen, die genug sein könnte, Ihre Aufträge laufen zuverlässig bei einer erheblichen Leistungskosten, da dann offensichtlich Userspace- und Kernel-Adressen kann nicht koexistieren machen.

Um dies versuchen Sie einen neuen Kernel benötigen würden. Unter Umständen können Sie nur eine von SuSE installieren (siehe wenn sie andere bieten aus, zum Beispiel zu wählen, eine „PAE“ Option) oder Sie können selbst kompilieren müssen, in diesem Fall ist es wahrscheinlich Ihren Support-Vertrag ungültig.

Aber wirklich, sollten Sie nur gehen mit der Option 1, wechseln Sie zu einem 64-Bit-JVM und legen die Füße hoch.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top