tossesMedlem sedan aug. 2003190 inlägg 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!!!!
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 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....?
Pröva att skapa clienten innan loopen. Nu skapar du en ny client för varje mail vilket är grymt prestanda ätande.
mvh
phonk
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 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
testa lägg till:
message.flush();
message.close();
efter din sista message.println
ViktorMedlem sedan aug. 20021 752 inlägg 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 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 !!!