Java Heap Space Fehler von der Befehlszeile aus
Habe ich versucht zu schaffen ein kleines Dienstprogramm, das liest excel und sendet eine E-Mail. Ich bin mit ApachePOI Bibliothek. Wenn ich ausgeführt den code von eclipse, zunächst bekam ich java.lang.OutOfMemoryError: GC overhead limit exceeded
Fehler. Dann habe ich die -Xms1024m
im VM-Argumente von eclipse und das Programm funktionierte gut in eclipse.
Dann habe ich exportiert den Satz von java-Programmen und Bibliotheken in RunnableJar und gebündelt die abhängigen Bibliotheken.
Nun von der Kommandozeile aus, wenn ich den Befehl ausführen
java -Xms1024m -jar AutomateProcesses.jar
Ich bin noch immer der gleiche Fehler. Ich bin nicht in der Lage, herauszufinden, das Problem. könnte mir bitte jemand in dieser Hinsicht helfen?
Sie gerade gebucht, den Fehler und wie es scheint, ist es ein problem mit der garbage collection.
Könnten Sie bitte lassen Sie mich wissen, wie das problem zu lösen?
Ich könnte versuchen, wenn Sie die gesamte Fehlermeldung.
java -Xms512m -Xmx2048 -jar AutomateProcesses.jar dies funktioniert
InformationsquelleAutor TechyHarry | 2013-02-27
Du musst angemeldet sein, um einen Kommentar abzugeben.
Könnten Sie versuchen,
Wenn das ist nur, was Los ist in dieser VM, die ist, was ich erwarte. Wenn die Bibliothek in der java-Prozess ist dann und erzeugt einen eigenen Prozess, dann die Bibliothek kann müssen einige andere Optionen zu konfigurieren.
EDIT:
Antwort auf diese Frage weist darauf hin, dass dieser Fehler, weil der GC verbringen zu viel Zeit versucht, sich zu erholen-Speicher und nicht immer. Ich bin nicht sehr vertraut mit Appache POI aber, wenn es reden zu Excel von java, dann ist es wahrscheinlich die Verwendung von COM-Aufrufe in der Excel-DLLs. Es kann sein, dass es einen Fehler in der Bibliothek oder in der Weise, dass Sie es verwenden, führt zu Objekten, Sie werden gesperrt der garbage collection und somit die GC arbeitet sehr hart, mit wenig Fortschritte.
Können Sie versuchen, Sie zu isolieren, den code, der dieses problem hat in einen kleineren Testfall?
Diese post hatte ein ähnliches problem in einem solchen Ausmaß, dass Sie re-schrieb die Weg waren Sie Umgang mit den Zellen in Excel, um zu vermeiden, erstellen eine große Anzahl von cellStyle-Objekte.
In einer ähnlichen Vene, diese person gab und schrieb Ihre Daten in das CSV-format.
Ich bekomme diesen Fehler im Linux-terminal. aber in Ordnung, die in linux eclipse.
Sind Sie mit 64bit-java? Wenn dem so ist, könntest du versuchen upping der Speicher eine Menge, und sehen, ob das funktioniert (vorausgesetzt, Sie haben ein gutes Stück von mem/vmem). Es ist ein workaround nicht beheben.
ja, 64 bit java,... könnten Sie bitte lassen Sie mich wissen, was macht das Gedächtnis?
java -Xms512m -Xmx4096 -jar AutomateProcesses.jar
InformationsquelleAutor hack_on
Um die maximale heap-Größe und erlauben Sie der Java VM mehr Speicher zuzuweisen, verwenden Sie den Befehl
-Xmx1024M
(oder-Xmx1G
).-Xms setzt die minimale bzw. die anfängliche heap-Größe.
immer noch die gleiche Fehlermeldung
InformationsquelleAutor das Keks
java.lang.OutOfMemoryError: GC overhead limit exceeded ist ein symptom für ein problem mit der JVM garbage collection (zu viel Zeit damit verbracht in GC). Der Fehler ist tatsächlich verhindern, dass die ganze JVM zu gehen, in der hang-Zustand, so dass Sie sammeln können, einige zusätzliche stats.
Lesen einer Excel-Tabelle, kann der Speicher intensiv, je nachdem wie groß die Datei ist, die Beurteilung der Druck-Punkt auf der GC Prozess.
Aktivieren und Analyse verbose:gc wird auf jeden Fall helfen. Man könnte auch generieren eine JVM-Heap-Dump und bestimmen, wo diese Erinnerung bleibt in deinem Java-Programm-Programm. Sie müssen entweder passen Sie die Java-heap-Größe und /oder beheben einer fehlerhaften Speicher-Aufbewahrung.
InformationsquelleAutor P-H