Meinews.de  


Zurück   Meinews.de > Forum > Newsgroups de.comp.lang.* Forum > Newsgroup de.comp.lang.java
Registrieren FAQ Benutzerliste Kalender Suchen Heutige Beiträge Alle Foren als gelesen markieren

Newsgroup de.comp.lang.java Die Programmiersprache Java

Antwort
 
Themen-Optionen Ansicht
  #1  
Alt 11-04-2009, 02:21 PM
Juri Ivanov
 
Beiträge: n/a
Standard OutOfMemoryError: Java heap space bei HTTP - PutMethod

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
Mit Zitat antworten
Alt Today
Advertising
Google Adsense
 
This advertising will not be shown
in this way to registered members.
Register your free account today
and become a member on
Meinews.de
Standard Sponsored Links

  #2  
Alt 11-04-2009, 06:02 PM
Bernd Eckenfels
 
Beiträge: n/a
Standard Re: OutOfMemoryError: Java heap space bei HTTP - PutMethod

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
Mit Zitat antworten
  #3  
Alt 11-04-2009, 06:32 PM
Bernd Hohmann
 
Beiträge: n/a
Standard Re: OutOfMemoryError: Java heap space bei HTTP - PutMethod

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
Mit Zitat antworten
  #4  
Alt 11-04-2009, 07:13 PM
Bernd Eckenfels
 
Beiträge: n/a
Standard Re: OutOfMemoryError: Java heap space bei HTTP - PutMethod

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
Mit Zitat antworten
  #5  
Alt 11-04-2009, 08:30 PM
Alexander Veit
 
Beiträge: n/a
Standard Re: OutOfMemoryError: Java heap space bei HTTP - PutMethod

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
Mit Zitat antworten
  #6  
Alt 11-04-2009, 08:57 PM
Bernd Eckenfels
 
Beiträge: n/a
Standard Re: OutOfMemoryError: Java heap space bei HTTP - PutMethod

Alexander Veit <alexander.veit*fernuni-hagen.de> wrote:
> starten und den erhaltenen Dump mit jhat analysieren.


oder Eclipse MAT

Gruss
Bernd
Mit Zitat antworten
  #7  
Alt 11-07-2009, 01:46 PM
Robert Kochem
 
Beiträge: n/a
Standard Re: OutOfMemoryError: Java heap space bei HTTP - PutMethod

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
Mit Zitat antworten
  #8  
Alt 11-07-2009, 04:38 PM
Bernd Eckenfels
 
Beiträge: n/a
Standard Re: OutOfMemoryError: Java heap space bei HTTP - PutMethod

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
Mit Zitat antworten
 
Antwort


Themen-Optionen
Ansicht

Forumregeln
Es ist dir nicht erlaubt, neue Themen zu verfassen
Es ist dir nicht erlaubt, auf Beiträge zu antworten
Es ist dir nicht erlaubt, Anhänge anzufügen
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten

vB Code ist An
Smileys sind An
[IMG] Code ist An
HTML-Code ist Aus

Ä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


Alle Zeitangaben in WEZ. Es ist jetzt 06:45 PM Uhr.





Powered by: vBulletin Version 3.6.7 (Deutsch)
Copyright ©2000 - 2009, Jelsoft Enterprises Ltd.
Forum SEO by Zoints