![]() |
|
|||||||
| Newsgroup de.comp.lang.java Die Programmiersprache Java |
![]() |
|
|
Themen-Optionen | Ansicht |
|
#1
|
|||
|
|||
|
Hallo!
Ich bekomme einen OutOfMemoryError Fehler, sobald ich versuche eine Datei, die größer ist als ca. 3MB mit einer Put-Methode auf einen WebDav-Server hochzuladen. Beispielscode: import org.apache.commons.httpclient.HttpClient; import org.apache.commons.httpclient.methods.PutMethod; HttpClient client = new HttpClient(); Credentials creds = new UsernamePasswordCredentials("userId", "pw"); client.getState().setCredentials(AuthScope.ANY, creds); PutMethod put = new PutMethod("http://IrgendeinServer/Basisordner/test.txt"); RequestEntity requestEntity = new InputStreamRequestEntity(new FileInputStream("/path/to/file/test.txt")); put.setRequestEntity(requestEntity); client.executeMethod(put); //<-- da steigt er aus Ich hatte ein ähnliches Problem bei HTTP Multipart Post. Da hat es geholfen den Stream (ich glaube das war FileOutputStream), mit dem er den Inhalt der Datei in die Anfrage schreibt, auf BufferedOutputStream umzustellen. Hier kann ich den OutputStream leider nicht beeinflussen. Die Größe des JavaHeaps zu erhöhen hat seltsamerweise auch nichts gebracht. Hier ist noch die Fehlermeldung: Exception in thread "Thread-5" java.lang.OutOfMemoryError: Java heap space at java.util.Arrays.copyOf(Unknown Source) at java.lang.AbstractStringBuilder.expandCapacity(Unk nown Source) at java.lang.AbstractStringBuilder.append(Unknown Source) at java.lang.StringBuffer.append(Unknown Source) Hätte jemand eine Idee, wie ich das Problem lösen könnte? Gruß, Juri |
|
|
||||
|
||||
|
|
|
#2
|
|||
|
|||
|
Juri Ivanov <Juri.Ivanov*medizinische-genetik.de> wrote:
> RequestEntity requestEntity = new InputStreamRequestEntity(new > FileInputStream("/path/to/file/test.txt")); > put.setRequestEntity(requestEntity); > client.executeMethod(put); //<-- da steigt er aus Probier mal ein FileRequestEntity. Aber so oder so sollte das in den HEap passen. Gruss Bernd |
|
#3
|
|||
|
|||
|
Bernd Eckenfels schrieb:
>> RequestEntity requestEntity = new InputStreamRequestEntity(new >> FileInputStream("/path/to/file/test.txt")); >> put.setRequestEntity(requestEntity); >> client.executeMethod(put); //<-- da steigt er aus > > Probier mal ein FileRequestEntity. Aber so oder so sollte das in den HEap > passen. Ach, diese Apache-Sachen sind teilweise so schlimm Programmiert dass sie nur begrenzt einsetzbar sind. Zb. dass man ASCII in char statt in byte ablegt *fg* Das Problem scheint zu sein, dass irgendwo mit zu kleinen Buffern gearbeitet wird, daher der Content arg fragmentiert läuft und der StringBuffer daher immer nur in kleinen Schritten erweitert wird. Testet man das lokal, wird sehr schnell viel Schrott auf dem Heap erzeugt dass die GC nicht mehr nachkommt. Was mich hier total stutzig macht ist der Stacktrace: zumindest bei mir (Java 5 oder 6?) nimmt StringBuffer in .append(..) sein eigenes .ensureCapacity(...) und ruft darin System.arraycopy(...) auf - was der Quatsch über AbstractStringBuilder und Array.copyOf(..) soll, ist mir schleierhaft und wäre imho eine derbe Performancebremse. Bernd -- Visit http://www.nixwill.de and http://www.spammichvoll.de jean.oliver*nixwill.de & bernado.bernhardi*spammichvoll.de |
|
#4
|
|||
|
|||
|
Bernd Hohmann <bernd.hohmann.20090228*freihaendler.com> wrote:
> Testet man das lokal, wird sehr schnell viel Schrott auf dem Heap > erzeugt dass die GC nicht mehr nachkommt. Nein das kann nicht sein. Vor einem OOM wird ein Stop the World FullGC gemacht. (Vorausgesetzt der passiert nicht ständig wegen memleak führt das dann nicht zu einem OOM wenn man zu viele Objekte zu schnell anlegt) Gruss Bernd |
|
#5
|
|||
|
|||
|
Am 04.11.2009, 15:21 Uhr, schrieb Juri Ivanov
<Juri.Ivanov*medizinische-genetik.de>: > Ich bekomme einen OutOfMemoryError Fehler, sobald ich versuche eine > Datei, die größer ist als ca. 3MB mit einer Put-Methode auf einen > WebDav-Server hochzuladen. > > [...] > > Hier ist noch die Fehlermeldung: > > Exception in thread "Thread-5" java.lang.OutOfMemoryError: Java heap > space > at java.util.Arrays.copyOf(Unknown Source) > at java.lang.AbstractStringBuilder.expandCapacity(Unk nown Source) > at java.lang.AbstractStringBuilder.append(Unknown Source) > at java.lang.StringBuffer.append(Unknown Source) > > Hätte jemand eine Idee, wie ich das Problem lösen könnte? Die Ursache des Problems muss nicht zwingend dieser Aufruf sein. Das Opfer ist er allemal. Um den Täter zu finden, würde ich die VM mit -XX:+HeapDumpOnOutOfMemoryError starten und den erhaltenen Dump mit jhat analysieren. -- Gruß, Alex |
|
#6
|
|||
|
|||
|
Alexander Veit <alexander.veit*fernuni-hagen.de> wrote:
> starten und den erhaltenen Dump mit jhat analysieren. oder Eclipse MAT Gruss Bernd |
|
#7
|
|||
|
|||
|
Bernd Eckenfels schrieb:
> Alexander Veit <alexander.veit*fernuni-hagen.de> wrote: >> starten und den erhaltenen Dump mit jhat analysieren. > > oder Eclipse MAT oder VisualVM (das ist so weiß ich weiß der Profiler aus Netbeans in eiener Standolone-version): https://visualvm.dev.java.net/ Robert |
|
#8
|
|||
|
|||
|
Robert Kochem <robert*mailueberfall.de> wrote:
> oder VisualVM (das ist so weiß ich weiß der Profiler aus Netbeans in eiener > Standolone-version): > > https://visualvm.dev.java.net/ Ne das ist der JConsole nachfolger. Aber um Heap Dumps zu analysieren ist MAT ungeschlagen. Gruss Bernd |
|
|
|
|
![]() |
| Themen-Optionen | |
| Ansicht | |
|
|
Ähnliche Themen
|
||||
| Thema | Erstellt von | Forum | Antworten | Letzter Beitrag |
| http://java.sun.com/javase/6/docs/api/java/io/File.html#listFiles() | Chris Seidel | Newsgroup de.comp.lang.java | 7 | 09-30-2009 12:21 PM |
| Java Script startet NETCF Anwendung per Http ??? | a.schenk | Newsgroup microsoft.public.de.german.windowsce | 0 | 06-09-2009 05:36 PM |
| java.net.SocketException: Can't connect to SOCKS proxy:http | Joerg Trumpfheller | Newsgroup de.comp.lang.java | 1 | 01-13-2009 09:37 AM |
| zugew. Heap Space abfragen | Thomas Weiler | Newsgroup de.comp.lang.java | 1 | 05-26-2008 04:18 PM |
| Ergebnis einer Zuweisung bei OutOfMemoryError | Jan Thomä | Newsgroup de.comp.lang.java | 6 | 12-14-2007 08:04 AM |