Frage

Ich versuche, Bilddateien zu. Wenn Sie Dateien von Größen von etwa 40 bis 200kb alles Hochladen ist in Ordnung. Aber wenn ich versuche, eine Datei mit einer Größe 459kb hochladen manchmal wird es hochgeladen und manchmal wird OutOfMemoryError gezeigt. Ich glaube nicht, dass die Dateigröße sehr groß ist für diese Fehler ausgelöst werden. Ich bin mit Harz. Ist es möglich, es gibt eine Harz-Einstellung, die verhindert, dass die großformatigen Dateien hochladen? Weil im Code gibt nirgendwo Ich gründe für das Hochladen von Dateien jeder maximale Größe.

Jeder irgendwelche Ideen, wie dies zu vermeiden. Ich möchte Benutzer auf etwa 10 MB Bilder jeder Größe von bis laden.

War es hilfreich?

Lösung

Wenn Sie Speicher laufen aus, das erste, was zu überprüfen ist, wie viel Speicher Ihre JVM zugewiesen hat. Sie sagen nicht, wie Harz läuft oder die JVM es verwendet oder die OS / Host aber in der Regel eine JVM wird von einem Standard-Heap-Größe und eine maximale Speichergröße geregelt. der Standard-JVM hat -Xms und -Xmx Parameter in der Befehlszeile, die diese Werte regeln. Wenn die JVM startet er ordnet den Standardheap und es erlaubt es maximal zu wachsen. Überschreitet eine Zuordnung die maximalen Heap es könnte versuchen, alle weich / schwachen Verweis und andere Einweg-Ressourcen freizugeben, eine GC erzwingen, aber wenn es noch nicht genug Platz hat, wird es eine OutOfMemoryException werfen. Daher Ändern die Werte beeinflussen kann, wenn dies geschieht.

Die zweite Sache zu suchen ist, wie Sie Speicher auf dem Server zuweisen. Zum Beispiel, wenn der Server einen Haufen Sachen im Speicher mit starken Referenzen hält Sie genügend Speicherplatz aus, wenn so einen schwachen Verweis statt oder so etwas wie Ehcache zu bewegen Sachen auf der Festplatte. Oder wenn Ihr Servlet wurde Zuteilung MB statt KB aufgrund irgendeine Art von Rechenfehler. Sie sollten sowieso nicht versuchen, die gesamte Eingabe in den Speicher zu lesen. Vorausgesetzt, dass Sie ein Servlet implementieren, dann wird die zugeführte ServletRequest / HttpServletRequest kann der Eingangsstrom des POST-zuzugreifen, und man kann es in Blöcken (zum Beispiel 32 KB zu einem Zeitpunkt) lesen und schreiben in Blöcken an einen Ausgangspuffer aus. Als allgemeine Faustregel gilt: Lesen in Eingabedaten diskreten Blöcken wäre ohnehin besser Praxis sein, da Sie nicht vertrauenswürdige Daten des Servers zu durchbrechen können, wollen nicht einige massive Datei an Sie, indem.

Andere Tipps

OutOfMemoryError geworfen durch die JVM, wenn nicht genügend Speicherplatz für eine bestimmte Aktion (Objekts Instanziierung zum Beispiel) verfügbar ist

Um solche Fehler vermeiden Sie den Speicher verfügbar für die JVM beim Start erhöhen können eine bestimmte Option auf Ihrer JVM abhängig (in der Regel -Xmx512m für 512 megas)

In Ihrem Fall so kleiner Upload sollte keine OutOfMemoryError erzeugen, und ich empfehle ein Tool wie Memory Analyzer mit , um den Ursprung des Fehlers zu identifizieren.

Beim Versuch, die Anwendung zu starten, stellen Sie die maximale und minimale Größe für die Halde und reservierte Bereiche

mit Xmx Xms Xss

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