Tomcat VM out of memory

Status
Nicht offen für weitere Antworten.

Henry

Mitglied
Hallo,

ich führe immer wieder eine umfangreiche Berechnung in Tomcat durch. Unter anderem wird auch viel in eine Datenbank geschrieben. Nun habe ich das Problem, dass häufig, nachdem ich 3 - 4 Mal diese Berechnung durchführe, eine "out-of-memory" Exception kommt. Wenn ich die Speichergröße der VM erhöhe, funktioniert es wieder in bißchen länger.

Meine Frage ist, wie kann ich den Speicher zwischen den einzelnen Berechnungen leeren, denn jede Berechnung einzeln ist kein Problem?

Schonmal vielen Dank.

Tschüß Henry
 

HLX

Top Contributor
Das hat mit dem Tomcat nichts zu tun sondern liegt direkt an deinem Programm. Du musst überflüssige Objekte freigeben, so dass der Garbage Collector diese entfernen kann. So lange noch Referenzen auf diese Objekte bestehen können sie auch nicht entfernt werden. Weiß ja keiner ob du die nochmal brauchst.
 
M

maki

Gast
PermSize erhöhen kann auch helfen, genaues findest du nur mit jconsole raus, ab Java 5.
 

PollerJava

Top Contributor
Ich würd da vorsichtig sein, ich hatte auch so ein Problem,
Wenn du eine HashMap oder eine Liste verwendest, dann musst du die Referenzen auf die Objekte in der Liste oder der Map explixit löschen, diese werden nämlich nicht automatisch vom gc gelöscht, also einfach die nicht mehr benötigten Instanzen in der Map auf "null" setzen,
ansonsten kannst Du z.B. mit dem Profiler von NetBeans oder Eclipse schauen, wer dir da denn Speicher so anfüllt,
(Profiler is bei NetBeans6.0 standardmäßig dabei)

PS: PermSize erhöhen hilft ja nur, wenn dein Programm sauber programmiert ist und keine Speicher-Löcher entstehen und das müssten schon wilde berechnungen sein, wenn Du mit der Standardgröße nicht auskommen solltest.
 

Henry

Mitglied
Hallo vielen Dank schonmal für die Antworten!

Leider kann ich mit dem "überflüssige Objekte freigeben" nicht so viel anfagen? Soll ich nicht mehr benötigte Variablen und Referenzen auf Objekte null setzen wie z. B. bei Visual Basic? Ich dachte das würde der GC automatisch übernehmen?
Ich arbeite mit Eclipse. Wie gesagt, dass Programm läuft innerhalb von Tomcat. Kann solch ein Profiler auch innerhalb vom Tomcat mein Programm analysieren. Was gibt es für Profiler?


Ich erkläre vielleicht nochmal was ich mache:

Also ich habe geographische Koordinaten in Form eines ASCII - Rasters (1200 x 1200 Pixel). Aus diesem lese ich die sinnvollen Werte (über 0) aus, wandele Sie in eine andere Projektion um und speichere dann die Werte in eine Datenbank Tabelle.

Nachfolgend nochmal im Einzelnen was ich mache:
- Ich nehme zuerst ein Array gezippter ASCII Dateien von einem Webservice entgegen.
- Jede dieser ASCII Dateien wird entzippt. Eine ASCII Datei ist dabei ungezippt 16MB groß.
- Ich lese die sinnvollen Werte dann aus jeder der ASCII Dateien aus und schreibe sie in die Datenbank.
- Dannach schreibe ich noch eine XML Datei, eine SLD (Styled Layer Descriptor) Datei und starte meinen Mapserver mittels einer GET - Anfrage neu.

Ich denke er harkt vor allem bei bei dem entzippen der ASCII Dateinen. Ich hänge deswegen den Code dieser Methode mal ran.


Vielleich hat hat jemand eine Idee, an was bei dieser Methode nicht so stimmt?

Code:
/**
	 * Damit werden die Byte-Ströme innerhalb des GeoData - Arrays entzippt.
	 * @param GeoDataArray
	 * @return GeoData Array ungezippt.
	 * @throws IOException
	 */
	public GeoData[] unzip (GeoData[] GeoDataArray) throws IOException
	{
		 byte[] buffer = new byte[16384];
		 
		for (int i = 0; i < GeoDataArray.length; i++) 
		{
			GeoDataFile[] GeoDataFileArray = GeoDataArray[i].getLayerFiles();
			
		 	for (int j = 0; j < GeoDataFileArray.length; j++) 
	    	{
				this.ID = HardCoded.VOR_ID + "_" + GeoDataFileArray[j].getDateiname().substring(0, GeoDataFileArray[j].getDateiname().lastIndexOf("_"));

	    		byte[] datenZipped = GeoDataFileArray[j].getDateiinhalt().clone();
	    		
	    		int value;
	    	    ZipInputStream inputStream = new ZipInputStream(new ByteArrayInputStream(datenZipped));
	    	    ByteArrayOutputStream bos = new ByteArrayOutputStream();
	    	    
				ZipEntry entry = inputStream.getNextEntry();
				/*while((value = inputStream.read()) != -1)
			    {
			    	bos.write(value);
			    }*/
				while((value = inputStream.read(buffer)) > 0)
		        {
		            bos.write(buffer, 0, value);
		         }
			    
			    bos.close();
			    inputStream.close();
			    
			    byte[] datenUnzipped = bos.toByteArray();
			    
			    GeoDataFileArray[j].setDateiinhalt(datenUnzipped);
			}
		 	
		 	GeoDataArray[i].setLayerFiles(GeoDataFileArray);
		}
   
    	return GeoDataArray;
	}
 

Angel4585

Bekanntes Mitglied
Also du erzeugst bei dem Aufruf dieser Methode ein Array mit 16K Elementen. Was machst du dann mit dem Array? Versuch das Array (buffer) man null zu setzen am Ende..

Obwohl.. eigentlich isses ne lokale Variable, sollte doch der gc übernehmen.
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
M Apache Proxy Weiterleitung auf Tomcat funktioniert nicht wie gewünscht Allgemeine Java-Themen 1
M tomcat probleme Allgemeine Java-Themen 1
M pfx-Zertifikat in Tomcat für SSL-Verschlüsselung nutzen Allgemeine Java-Themen 14
W JSP / Tomcat / Filter / Preprocessing Allgemeine Java-Themen 7
G Embedded Tomcat (war vs. jar) Allgemeine Java-Themen 6
R Tomcat startet nicht Allgemeine Java-Themen 1
X Tomcat checkParachute Allgemeine Java-Themen 1
X Encoding in Tomcat Allgemeine Java-Themen 2
X Performance für Tomcat / Apache optimieren Allgemeine Java-Themen 2
A Java Klasse auf Tomcat während der Laufzeit austauschen Allgemeine Java-Themen 1
N Schulung zu Tomcat/JSP/Struts gesucht Allgemeine Java-Themen 0
P Tomcat Deploy path Allgemeine Java-Themen 2
reibi Classpath Classpath Variable beim Tomcat Allgemeine Java-Themen 2
HarleyDavidson Tomcat VS Windows Scheduled Task Allgemeine Java-Themen 4
L Java Version aus Tomcat ermitteln Allgemeine Java-Themen 3
J WindowsServer (12) und Tomcat 7 Allgemeine Java-Themen 14
D Tomcat/Derby Webapp Allgemeine Java-Themen 7
2 JPA und Tomcat Allgemeine Java-Themen 4
S Tomcat java.util.logging - keine Logs Allgemeine Java-Themen 12
S Mac Adresse aus Tomcat Allgemeine Java-Themen 7
H Tomcat: JVM Crash ntdll.dll Allgemeine Java-Themen 2
I Problem mit Tomcat der URL Allgemeine Java-Themen 5
Mr.Isaaaac Tomcat Proxy Einstellungen, hä? Allgemeine Java-Themen 3
P OpenGts,Java,Ant, tomcat Allgemeine Java-Themen 8
T Wie Hibernate im Tomcat installieren? Allgemeine Java-Themen 2
E Einfaches Problem mit Tomcat Allgemeine Java-Themen 18
E welche standalone Version von Tomcat benutzen? Allgemeine Java-Themen 6
S Zwei Anwendungen unter Tomcat Allgemeine Java-Themen 4
S "Guessed User name" bei Tomcat belegen Allgemeine Java-Themen 2
G Servlet über apache Tomcat ansprechen Allgemeine Java-Themen 6
L Tomcat cache Allgemeine Java-Themen 10
L Tomcat erkennt Share nicht Allgemeine Java-Themen 6
M TomCat Login Allgemeine Java-Themen 19
F Was tun bei der Exception? SW: hbernate, tomcat, postgresql Allgemeine Java-Themen 4
I Tomcat, Lucene, Probleme Allgemeine Java-Themen 4
Y PDF Report mit Tomcat Heap Space Problem Allgemeine Java-Themen 9
J Suse + Tomcat + Sysdeo Plugin: Tomcat als user starten Allgemeine Java-Themen 2
franzi Tomcat acceptCount Allgemeine Java-Themen 1
G Tomcat ResourceBundle Allgemeine Java-Themen 7
V Java/Tomcat auf Virtual Server Allgemeine Java-Themen 11
M Java, PHP und Tomcat Allgemeine Java-Themen 4
P Classpath, Tomcat und Eclipse Allgemeine Java-Themen 4
M Java Webserver - Tomcat alleine oder zusammen mit Apache? Allgemeine Java-Themen 3
M Foreign Memory API / Memory-Mapped File Allgemeine Java-Themen 0
C Durch klicken von Button in GUI wird leeres Fenster geöffnet und nicht mein Spiel "Memory" Allgemeine Java-Themen 13
E Java Shared Memory? Allgemeine Java-Themen 6
B Java Sound Memory Overload Allgemeine Java-Themen 0
P Memory Editing mit JNA, tutorial? Allgemeine Java-Themen 3
Q Memory-Leak in BlockingQueue Allgemeine Java-Themen 3
E Zweidimensionales Array Integer[10 000][10 000] -> out of memory? Allgemeine Java-Themen 4
X Bild im Memory zwischen speichern Allgemeine Java-Themen 11
T Java Memory Puzzle Allgemeine Java-Themen 6
H jni memory problem Allgemeine Java-Themen 8
S Memory Leak!!! Allgemeine Java-Themen 7
dayaftereh JVM Memory Usage Allgemeine Java-Themen 5
Z Schwankung "Total Memory"? Allgemeine Java-Themen 8
L Methode "Neues Spiel" für Memory Allgemeine Java-Themen 2
L Brauche Hilfe bei Memory Programmierung Allgemeine Java-Themen 2
M File im memory erzeugen Allgemeine Java-Themen 5
F Frage zu Memory Leak, Garbage Collection und Profiler-Tools Allgemeine Java-Themen 6
P Java Memory Leaks Allgemeine Java-Themen 12
J Out Of Memory - Speicher vergrößern? Allgemeine Java-Themen 2
C ArrayList Out of Memory Allgemeine Java-Themen 28
P out of memory -> heap wächst und wächst Allgemeine Java-Themen 7
J RAM freimachen mit KOmprimiertem in-memory-swap Allgemeine Java-Themen 7

Ähnliche Java Themen


Oben