Hallo zusammen,
es gibt nach wie vor das Speicher-Problem (memory leak) beim Einsatz des Hintergrundagenten auf dem Domino Server.
Ich hatte heute Nacht den Agenten im 5 Minuten Takt durchlaufen lassen und nach so 50 bis 70 Durchgängen erhalte ich beim Start des Agenten auf der Konsole die Meldung:
Agent 'Fetch News Background' error: LS2J Error: Threw java.lang.OutOfMemoryError
Frage:Kann das jemand bestätigen, der ebenfalls über den Server fetcht?
Hinweis:Dem Server passiert hierbei nichts. Andere Agenten werden auch weiter ausgeführt.
TELL AMGR QIUT und
LOAD AMGR
beheben das Problem (bis es später wieder auftritt)
In der vorletzten Version hatte ich das darauf zurückgeführt, das ich nach dem Aufruf die Java-Klasse nicht explizit "Deleted" hatte. Jetzt mache ich das aber es sieht so aus, als ob hierdurch die Java-Objekte nicht wirklich den verwendeten Speicher freigeben.
Ein Suche auf notes.net im 6er Forum liefert einen
Betrag mit ziemlich gleichem Focus, aber keine der Antworten hilft dem Fragenden.
Mein Java-Code entspricht (nur noch um die Proxy-Auth ergänzt) dem von Axel Janssen hier zu meinem ersten Post zur Verfügung gestellten Java-Code:
import java.io.*;
import java.net.*;
/**
* @author Axel
*
* To change this generated comment edit the template variable "typecomment":
* Window>Preferences>Java>Templates.
* To enable and disable the creation of type comments go to
* Window>Preferences>Java>Code Generation.
*/
public class GetRSSFeed {
public String getRSSFeed(String urlToRead) {
URL url;
HttpURLConnection conn = null;
// Stream (not Writer!). So werden einzelne bytes gelesen.
InputStream is = null;
// Strings sind inmutable.
// durch StringX = StringX + StringY; wird jedesmal ein neuer StringX erzeugt.
// Bei String Konkenatierung StringBuffer benutzen und am Ende String aus gesamten
// StringBuffer erzeugen.
StringBuffer bufResult = new StringBuffer();
int c = 0;
try {
url = new URL(urlToRead);
conn = (HttpURLConnection) url.openConnection();
conn.setRequestMethod("GET");
is = new BufferedInputStream(conn.getInputStream());
// einzelne Bytes werden gelesen
// -1 ist endOfStream character
while ((c = is.read()) != -1) {
// int in char gecastet.
bufResult.append((char) c);
}
is.close();
is = null;
} catch (IOException e) {
e.printStackTrace();
// nicht geschlossene connection panik. immer besser
try {
if (is != null) {
is.close();
}
} catch (IOException ioe) {
ioe.printStackTrace();
}
}
// in StringBuffer wurden chars gesammelt. Der wird jetzt in String konvertiert.
return bufResult.toString();
}
Vielleicht hat jemand eine Idee? Danke!
Gruss
Manfred