HTMLUnit, JavaScript und Heap Space Problem

Status
Nicht offen für weitere Antworten.

paldawin

Mitglied
Hallo,

ich benutze das HTMLUnit-Framework um einen Webcrawler zu entwickeln. Hierbei stoß ich jedoch auf ein Problem, bei der Verarbeitung von Javascript. Wenn ich sehr viele JS-Aufrufe verarbeite (so bei 100) bekomme ein Heap-Space Problem! Meine Anwendung läuft mit 128 MB. Wenn ich Seiten verarbeite bei dem kein JS verarbeitet wird, bekomm ich kein Problem.
Ich habe das Problem schon gegooglet jedoch nichts brauchbares gefunden. Bei jedem Laden einer Webseite mir ein neues WebClient-Objekt zu erstellen wäre zwar möglich, jedoch würde ich dabei schon bestehnde Cookies und somit schon bestätigte Disclaimer von Webseiten verlieren!
Ich konnte das Problem soweit einschränken das ich weiß das mein WebClient-Objekt irgendwie mit der Zeit zuviel Daten über die Javascriptaufrufe ansammelt, jedoch hab ich noch keinen Weg gefunden diese zu löschen!
Wollt deswegen mal nachfragen, ob sich jemand mit dem Framework auskennt und mir einen Tipp geben kann!

Verarbeitung von JavaScript:
Code:
ScriptResult result = page.executeJavaScript(javascript);
page.getEnclosingWindow().getThreadManager().joinAll(10000);
HtmlPage executedPage = (HtmlPage) result.getNewPage();

Laden einer Webseite:
Code:
try {
        HtmlPage page = (HtmlPage) client.getPage(url);
	cache.addUrl(url);
	return page;
} catch (Exception e) {				
	throw new NullPageException("Fehler beim Laden der Seite: " +url);
}
 

HoaX

Top Contributor
Offensichtlicher Programmierfehler deinerseites oder woran lags? Lass uns nicht dumm sterben ...
 

paldawin

Mitglied
Kein Programmierfehler meinerseits, liegt wahrscheinlich am HTMLUnit-Framework, das bei zuvielen Javscriptverarbeitungen zuviele Daten anhäuft. Habe es jetzt so gelöst das ich mit
Code:
boolean checkMemoryWorkload() {
	Runtime runtime = Runtime.getRuntime();
	double maxMemory = runtime.maxMemory();
	double totalMemory = runtime.totalMemory();
	double workload = totalMemory / maxMemory * 100;
	if(workload > 85) {
		return true;
	}
	return false;
}
überprüfe wieviel Speicher verbraucht wird und wenns kritisch wird, wird das ausgeführt
Code:
void reconfigWebConnection() {
		if(checkMemoryWorkload()) {
			CookieManager cookieManager = client.getCookieManager();
			setWebConfig(browserVersion, proxy, port, javascript);
			client.setCookieManager(cookieManager);
		}		
}

@Override
public void setWebConfig(BrowserVersion browserVersion, String proxyHost, int port, boolean js) {
	client = new WebClient(browserVersion);
	client.setTimeout(5000);
	client.setThrowExceptionOnScriptError(false);
	client.setJavaScriptEnabled(js);
	ProxyConfig config = client.getProxyConfig();		
	config.setProxyHost(proxyHost);
	config.setProxyPort(port);
}
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
T HTTP HtmlUnit - Javascript Error Netzwerkprogrammierung 2
T HTMLUNIT Formularfüll Versuch Netzwerkprogrammierung 3
A HTMLunit: Form ElementNotFound Netzwerkprogrammierung 4
S Proxy Authentifizierung HtmlUnit Netzwerkprogrammierung 8
M HtmlUnit form finden... Netzwerkprogrammierung 2
M Login mit HtmlUnit Netzwerkprogrammierung 6
P HTTP HtmlUnit... Seite "offen halten" bzw. darauf verweilen Netzwerkprogrammierung 4
J HTMLUnit arbeit sehr langsam . Alternative? Netzwerkprogrammierung 6
T HTTP JAVA Browser Konsolenanfrage(JavaScript) Netzwerkprogrammierung 7
C Gerenderte Website nach der ausführung von JavaScript als HTML Code aus lesen Netzwerkprogrammierung 4
F Website parsen, die mit javascript zusammengebaut wird Netzwerkprogrammierung 1
D Webseite(mit JavaScript-Element) mit Java auslesen Netzwerkprogrammierung 0
E HTTP HttpURLConnection & Javascript Netzwerkprogrammierung 2
D OT JavaScript JQuery AJAX Request Netzwerkprogrammierung 2
P Mit Java Javascript-Anfrage versenden Netzwerkprogrammierung 4
M HTTP HTTPS-Verbindung mittels Java und Javascript Netzwerkprogrammierung 2
L JavaScript Methode mit Java aufrufen Netzwerkprogrammierung 40
D Javascript Funktion aus Java Anwendung ausführen Netzwerkprogrammierung 5
B Socket Bilder verschicken via Sockets. Heap-Problem. Netzwerkprogrammierung 2

Ähnliche Java Themen


Oben