webForumDet fria alternativet

java.lang.OutOfMemoryError

9 svar · 432 visningar · startad av tosses

tossesMedlem sedan aug. 2003190 inlägg
#1

java.lang.OutOfMemoryError

HJÄLP!!!!!!!

Jag har ett jsp script som mailar iväg en massa mail, loopar igenom mailadresser och mailar iväg.

Men har jag för många adresser får jag felmeddelandet:
java.lang.OutOfMemoryError

Jag vet att några skulle vilja halshugga mig nu för att jag postar detta i både JSP och Java forumet men jag behöver verkligen hjälp med detta!!!!!!!!

Snälla hjälp!!!!

phonkworksMedlem sedan juli 2001228 inlägg
#2

Kan vara lite olika orsaker. Vet inte hur du spara adresserna men ligger de i en db och du selectar allihop kan ett bus stort resultset orsaka OutOfMemory.
Pröva att begränsa antalet per select och selecta fler gånger istället.

Kan också bero på att du startar en miljarrrrd mail trådar väldigt snabbt. Pröva att vänta några millis mellan varje trådstart.

mvh
phonk

tossesMedlem sedan aug. 2003190 inlägg
#3

Humm hmm, här kommer lite kod hmm i hmm JSP hmm.

Stmt = Conn.prepareStatement(sql);
ResultSet rslt56 = Stmt.executeQuery();
while(rslt56.next()){
if(rslt56.getString("villhamail")==null){
out.print("Till: " + rslt56.getString("Epost")+ " <img src='bockgron.gif'>" + "<br>");
String to = rslt56.getString("Epost");

try{
SmtpClient client = new SmtpClient("127.0.0.1");
client.from(from);
client.to(to);
PrintStream message = client.startMessage();
message.println("From: " + from);
message.println("To: " + to);
message.println("Subject: " + rslt55.getString("amne"));
message.println(rslt55.getString("brevtext"));
message.println("");
message.println("");
message.println("");
message.println("");
message.println("Vill du inte ha flera mail från oss så klicka här:");
message.println("http://adress/ftg/stoppabrev.jsp?Epost="+rslt56.getString("Epost"));
client.closeServer();
}
catch (IOException e){
System.out.println("ERROR SENDING EMAIL:"+e);
}
} else {
out.print("Till :" + rslt56.getString("Epost") + " <img src='bockrod.gif'>" + "<br>");
}
}
}

}
} catch(NullPointerException e){}

Det jag gör är att i en SQLfråga väljer en massa adresser som jag sedan loopar iväg ett efter ett.
Måste jag skapa någon sorts paus emellan alla mail eller kan jag öka minnet som java arbetar med eller....?

phonkworksMedlem sedan juli 2001228 inlägg
#4

Pröva att skapa clienten innan loopen. Nu skapar du en ny client för varje mail vilket är grymt prestanda ätande.

mvh
phonk

tossesMedlem sedan aug. 2003190 inlägg
#5

Hur gör jag det ??

phonkworksMedlem sedan juli 2001228 inlägg
#6

SmtpClient client = new SmtpClient("127.0.0.1"); // flyttad hit, dvs innan while loopen

while(rslt56.next()){
	
	if(rslt56.getString("villhamail")==null){
		
		out.print("Till: " + rslt56.getString("Epost")+ " <img src='bockgron.gif'>" + "<br>");
		String to = rslt56.getString("Epost");
		
		try{
			  
			client.from(from);
			client.to(to);
			PrintStream message = client.startMessage();
			message.println("From: " + from); 
			message.println("To: " + to);
			message.println("Subject: " + rslt55.getString("amne"));
			message.println(rslt55.getString("brevtext"));
			message.println("");
			message.println("");
			message.println("");
			message.println("");
			message.println("Vill du inte ha flera mail från oss så klicka här:");
			message.println("http://adress/ftg/stoppabrev.jsp?Epost="+rslt56.getString("Epost"));
			
		}
		catch (IOException e){ 
			System.out.println("ERROR SENDING EMAIL:"+e);
		}
		
	} else {
		out.print("Till :" + rslt56.getString("Epost") + " <img src='bockrod.gif'>" + "<br>");
	}
}

client.closeServer(); // flyttad hit så du stänger först när allt är klart

mvh
phonk

tossesMedlem sedan aug. 2003190 inlägg
#7

Tyvärr då får jag detta felmeddelande:

java.net.SocketException: Software caused connection abort: recv failed
at java.net.SocketInputStream.socketRead0(Native Method)
at java.net.SocketInputStream.read(SocketInputStream.java:129)
at java.io.BufferedInputStream.fill(BufferedInputStream.java:183)
at java.io.BufferedInputStream.read(BufferedInputStream.java:201)
at sun.net.TransferProtocolClient.readServerResponse(TransferProtocolClient.java:49)
at sun.net.smtp.SmtpClient.issueCommand(SmtpClient.java:46)
at sun.net.smtp.SmtpClient.closeServer(SmtpClient.java:38)
at sun.net.NetworkClient.openServer(NetworkClient.java:117)
at sun.net.smtp.SmtpClient.openServer(SmtpClient.java:111)
at sun.net.smtp.SmtpClient.(SmtpClient.java:156)
at pagecompile._ftg._maila_xjsp._jspService(_maila_xjsp.java:206)
at com.newatlanta.servletexec.JSP10HttpJspPage.service(JSP10HttpJspPage.java:41)
at com.newatlanta.servletexec.JSP10Servlet.service(JSP10Servlet.java:778)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:853)
at com.newatlanta.servletexec.ServletExec.CallServletService(ServletExec.java:1679)
at com.newatlanta.servletexec.ServletExec.processServletRequest(ServletExec.java:1654)
at com.newatlanta.servletexec.ServletExec.processServletAlias(ServletExec.java:1602)
at com.newatlanta.servletexec.ServletExec.ProcessRequest(ServletExec.java:1343)
at com.newatlanta.servletexec.ServletExec.ProcessRequest(ServletExec.java:1113)

Snyft hmm

Aleph_OneMedlem sedan juni 2003372 inlägg
#8

testa lägg till:

message.flush();
message.close();

efter din sista message.println

ViktorMedlem sedan aug. 20021 752 inlägg
#9

Tråden flyttad från Java forumet.

Jag vet att några skulle vilja halshugga mig nu för att jag postar detta i både JSP och Java forumet men jag behöver verkligen hjälp med detta!!!!!!!!

korspostning är inte tillåten hos webForum hur mycket hjälp du än behöver.

/Viktor

tossesMedlem sedan aug. 2003190 inlägg
#10

jag har fått det att fungera!!

Väldigt pinsamt faktiskt!!!

Min SMTP server sätter en gräns vid 10 anslutningar och då händer det nåt med jspfilen!

Om jag ökar antalet anslutningar så verkar det funka!!

TACK FÖR ALL HJÄLP !!!

137 ms totalt · 3 externa anrop · v20260731065814-full.30151723
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
134 ms — hämta tråd, inlägg och bilagor (db)