2013-04-05 11 views
6

Używam HtmlUnit aby zalogować się do witryny, a następnie pobrać dane z tabeliOutOfMemoryError podczas korzystania HtmlUnit do złomowania

Kiedy uruchomić mój kod to jest przyczyną java.lang.OutOfMemoryError i nie mógł działać dalej.

Po to mój kod:

WebClient webClient = new WebClient(BrowserVersion.INTERNET_EXPLORER_6); 
webClient.getOptions().setJavaScriptEnabled(true); 
webClient.getOptions().setCssEnabled(false); 
webClient.getOptions().setRedirectEnabled(true); 
webClient.getCookieManager().setCookiesEnabled(true); 
          webClient.getOptions().setPrintContentOnFailingStatusCode(false); 
webClient.setAjaxController(new NicelyResynchronizingAjaxController()); 
webClient.getOptions().setTimeout(50000); 
webClient.getOptions().setUseInsecureSSL(true); 
webClient.getOptions().setPopupBlockerEnabled(true); 

HtmlPage htmlPage=webClient.getPage(url); 
Thread.sleep(200); 
          //~~~~~~~Log-In 
HtmlTextInput uname=(HtmlTextInput)htmlPage.getFirstByXPath("//*[@id=\"username\"]"); 
uname.setValueAttribute("xxx"); 
HtmlPasswordInput upass=(HtmlPasswordInput)htmlPage.getFirstByXPath("//*[@id=\"password\"]"); 
upass.setValueAttribute("xxx"); 
HtmlSubmitInput submit=(HtmlSubmitInput)htmlPage.getFirstByXPath("//*[@id=\"login-button\"]/input"); 
htmlPage=(HtmlPage) submit.click(); 
Thread.sleep(200); 
webClient.waitForBackgroundJavaScript(10000); 
for (int i = 0; i < 250; i++) { 
if (!htmlPage.asText().contains("Loading...")) { 
    break; 
    } 
    synchronized (htmlPage) { 
    htmlPage.wait(500); 
} 
} 

System.out.println(htmlPage.asText()); 

i Poniżej znajduje się StackTrace

java.lang.OutOfMemoryError: Java heap space 
at net.sourceforge.htmlunit.corejs.javascript.Node.newString(Node.java:155) 
at net.sourceforge.htmlunit.corejs.javascript.Node.newString(Node.java:151) 
at net.sourceforge.htmlunit.corejs.javascript.IRFactory.createPropertyGet(IRFactory.java:1990) 
at net.sourceforge.htmlunit.corejs.javascript.IRFactory.transformPropertyGet(IRFactory.java:968) 
at net.sourceforge.htmlunit.corejs.javascript.IRFactory.transform(IRFactory.java:106) 
at net.sourceforge.htmlunit.corejs.javascript.IRFactory.transformPropertyGet(IRFactory.java:964) 
at net.sourceforge.htmlunit.corejs.javascript.IRFactory.transform(IRFactory.java:106) 
at net.sourceforge.htmlunit.corejs.javascript.IRFactory.transformPropertyGet(IRFactory.java:964) 
at net.sourceforge.htmlunit.corejs.javascript.IRFactory.transform(IRFactory.java:106) 
at net.sourceforge.htmlunit.corejs.javascript.IRFactory.transformFunctionCall(IRFactory.java:595) 
at net.sourceforge.htmlunit.corejs.javascript.IRFactory.transform(IRFactory.java:86) 
at net.sourceforge.htmlunit.corejs.javascript.IRFactory.transformInfix(IRFactory.java:775) 
at net.sourceforge.htmlunit.corejs.javascript.IRFactory.transform(IRFactory.java:161) 
at net.sourceforge.htmlunit.corejs.javascript.IRFactory.transformAssignment(IRFactory.java:368) 
at net.sourceforge.htmlunit.corejs.javascript.IRFactory.transform(IRFactory.java:152) 
at net.sourceforge.htmlunit.corejs.javascript.IRFactory.transformExprStmt(IRFactory.java:488) 
at net.sourceforge.htmlunit.corejs.javascript.IRFactory.transform(IRFactory.java:149) 
at net.sourceforge.htmlunit.corejs.javascript.IRFactory.transformBlock(IRFactory.java:406) 
at net.sourceforge.htmlunit.corejs.javascript.IRFactory.transform(IRFactory.java:82) 
at net.sourceforge.htmlunit.corejs.javascript.IRFactory.transformIf(IRFactory.java:762) 
at net.sourceforge.htmlunit.corejs.javascript.IRFactory.transform(IRFactory.java:110) 
at net.sourceforge.htmlunit.corejs.javascript.IRFactory.transformBlock(IRFactory.java:406) 
at net.sourceforge.htmlunit.corejs.javascript.IRFactory.transform(IRFactory.java:82) 
at net.sourceforge.htmlunit.corejs.javascript.IRFactory.transformIf(IRFactory.java:762) 
at net.sourceforge.htmlunit.corejs.javascript.IRFactory.transform(IRFactory.java:110) 
at net.sourceforge.htmlunit.corejs.javascript.IRFactory.transformBlock(IRFactory.java:406) 
at net.sourceforge.htmlunit.corejs.javascript.IRFactory.transform(IRFactory.java:82) 
at net.sourceforge.htmlunit.corejs.javascript.IRFactory.transformIf(IRFactory.java:768) 
at net.sourceforge.htmlunit.corejs.javascript.IRFactory.transform(IRFactory.java:110) 
at net.sourceforge.htmlunit.corejs.javascript.IRFactory.transformBlock(IRFactory.java:406) 
at net.sourceforge.htmlunit.corejs.javascript.IRFactory.transform(IRFactory.java:82) 
at net.sourceforge.htmlunit.corejs.javascript.IRFactory.transformFunction(IRFactory.java:560) 

Włożyłem linie follwoing w pliku catlina.sh o przydzieleniu pamięci sterty Ale wciąż otrzymuję ten sam błąd (Mój rozmiar pamięci RAM to 2 GB).

if [ -z "$LOGGING_MANAGER" ]; then 
    JAVA_OPTS="$JAVA_OPTS -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager" 
else 
    JAVA_OPTS="$JAVA_OPTS $LOGGING_MANAGER" 
fi 

# Uncomment the following line to make the umask available when using the 
# org.apache.catalina.security.SecurityListener 
    JAVA_OPTS="$JAVA_OPTS -Dorg.apache.catalina.security.SecurityListener.UMASK=`umask`" 
    JAVA_OPTS="$JAVA_OPTS -Xms512m -Xmx2048m -XX:MaxPermSize=512m" 
    JAVA_OPTS="-server -XX:+UseConcMarkSweepGC" 
+0

Patrząc na ślad stosu, można zobaczyć, że to recursing dużo. Wydaje się, że nie jest to cały ślad stosu - ile Cię obcięto? –

+0

Umieściłem tylko przyczynę ze śledzenia stosu –

+0

W tym śladzie stosu nie ma wskazania kodu, dlatego mówię, że go skrócono. W pewnym momencie powinien być wiersz z twojego kodu (lub linia wskazująca na coś takiego ... 1234 więcej linii) –

Odpowiedz

5

dołączyć ten $ JAVA_OPTS w ostatniej linii kodu, może Twój kod działa

JAVA_OPTS="$JAVA_OPTS -server -XX:+UseConcMarkSweepGC" 
+2

Dzięki rajendra ... Mam Napisałem ostatnią linię niepoprawnie w catlina.sh Zmieniłem ją. Teraz działa dzięki. –

Powiązane problemy