Konnte nicht genügend heap-Speicher für Java
Haben wir eine Anwendung, die ausgeführt wurde fein für ein Jahr. Es ist eine web-Anwendung, die unter Tomcat 5.5 + JDK 1.5 unter Microsoft Cluster auf Windows Server 2003 Enterprise Edition-Service Pack 2. Der server hat 11 GB RAM (ich weiß, es ist nutzlos!) mit der folgenden Beschreibung "Physical Address Extension": ich weiß nicht, was das bedeutet.
Den Tomcat-Dienst konfiguriert ist, mit den folgenden Parametern: -Xmx1024m -Xms128m
Seit der letzten Woche, der service will nicht mehr starten und bricht mit der folgenden Fehlermeldung: "Konnte nicht genügend heap-Speicher".
Wir haben versucht, mehrere tests:
java -Xmx1024m -version
=> Konntejava -Xmx758m -version
=> Konntejava -Xmx512m -version
=> Bestanden
So können wir mit weniger Speicher für die maximale heap-Größe, aber es ist nicht eine akzeptable Lösung, da die Anzahl der Benutzer steigt in wenigen Monaten, und wir brauchen, um die maximale heap-Größe zu 1024Mb.
Auch ich verstehe nicht, warum es geklappt hat und dann plötzlich es aufgehört zu arbeiten! Es scheint, dass das OS jetzt nicht reservieren zusammenhängender Speicher Speicher, oder etwas anderes (Seite, Datei-Größe, Speicher-Allokation, ...)
Ist es ziemlich schwierig zu wissen, ob sich etwas geändert hat (OS-patch, Konfiguration, ...), da die web-Anwendung läuft auf dem Kunden-server und wir haben keinen Zugriff darauf.
-Xmx1024m -Xmx128m
wirklich? Meinst du -Xmx1024m -Xms128m
(Hinweis: die -Xms)?Physikalische Adress-Erweiterung: en.wikipedia.org/wiki/Physical_Address_Extension - Es bedeutet 32-bit-Prozessoren mehr als 4 GB ram.
Auch ich habe vergessen zu sagen, dass wir fanden eine JRE 1.6 installiert "C:\Program Dateien\Java\jre1.6.0_07". Das JDK (1.5 ie) ist nicht im system Weg, aber die oben genannten tests verwendet das JDK und nicht das JRE. Auch Tomcat konfiguriert ist, verwenden Sie die JDK.
Ouups sorru: ja, es ist -Xmx1024m -Xms128m
Versuchen Sie andere JVM - Lastest 1.6, 1.5 neuesten, aktuellsten 1.7. Kann es etwas falsch mit JVM
InformationsquelleAutor Eric Taix | 2011-04-26
Du musst angemeldet sein, um einen Kommentar abzugeben.
Java erfordert kontinuierliche Erinnerung. Auf 32-bit-Betriebssysteme, die diese Grenzen, die Sie zwischen 1,2 und 1,4 GB auf Windows. Allerdings, wenn Ihr Speicher ist fragmentiert durch andere Programme, die Sie ausführen, erhalten Sie möglicherweise eine viel kleinere region Speicher.
Wirst du nicht bekommen dieses problem mit einem 64-bit OS und man kann sogar reservieren weit mehr Speicher für die jVM, als auch (wenn Sie eine 64-bit-JVM)
InformationsquelleAutor Peter Lawrey
Ich habe Neuigkeiten zu meinem problem.
Scheint dies durch eine Windows-Sicherheits-update ! Das Microsoft-Sicherheitsupdate verhindert, dass java-Anwendungen zu reservieren, eine große Menge an zusammenhängenden Speicher...
Mehr Informationen hier: http://support.microsoft.com/kb/971812
Wir prüfen, ob der patch dieses problem löst.
Bleiben Sie dran,
InformationsquelleAutor Eric Taix
Gut, sollten Sie überprüfen, wie viel Speicher verfügbar ist und wenn es nicht genug ist, sollten Sie überprüfen, was verbraucht so viel Speicher.
Anderes, als dass Sie hätte sprechen Sie mit Ihrem Kunden und finden Sie heraus, wenn Sie haben änderungen an den server, und wenn ja, was Sie Taten ändern.
Ohne zu wissen, mehr, es ist wirklich schwer bis unmöglich zu geben, keine qualifizierte Beratung auf, warum Sie nicht mehr Speicher zuzuweisen.
InformationsquelleAutor Thomas
Es wahrscheinlich bedeutet, dass das Betriebssystem nicht genügend zusammenhängender Arbeitsspeicher. Hast du immer noch das problem nach dem OS-Neustart? Hat der system-Bericht, es hat 11 Gb RAM? Die Windows-Implementierung von PAE ist nicht die beste, so dass es zu Problemen führen könnte. Versuchen, die Aktualisierung auf eine neuere JDK, wenn das fehlschlägt, benötigen Sie ein 64-bit-Maschine.
Unser Kunde sagte uns, dass er den server neu gestartet. Also vermute ich, dass er es Tat ! Aber ich kann wirklich nicht verstehen, warum es funktionierte Letzte Woche und plötzlich ist es nicht. Auch ich lief eine einfache VMWare-VM mit nur 1Go RAM (Windows XP) und ich war in der Lage, Zuordnung von bis zu 1.2 Gehen (java -Xmx1200m -version") ich weiß, dass ohne Informationen darüber, was der Kunde hat auf dem server, es wird sehr schwierig sein, dieses Problem zu lösen. Gibt es irgendein Dienstprogramm, um zu sehen (in einer grafischen Art und Weise, zum Beispiel), wie viele kontinuierliche Speicher verfügbar ist, auf das OS ?
Talx: Sie haben zu setzen -Xms1000m (ab Speicher), da die Einstellung nur max-Wert wird nicht wirklich zuordnen, die viel Speicher.
InformationsquelleAutor Denis Tulskiy