2013-04-05 19 views
6

Sto usando HtmlUnit per accedere a un sito e poi scaricare i dati dalla tabellaOutOfMemoryError durante l'utilizzo HtmlUnit per la demolizione dei

Quando eseguo il mio codice è sta causando java.lang.OutOfMemoryError E non poteva correre più lontano.

seguito è il mio codice:

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()); 

e seguito è 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) 

ho messo righe nel file di follwoing catlina.sh di assegnare memoria heap Ma ancora sto ottenendo lo stesso errore (La mia dimensione della RAM è 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

Guardando la traccia dello stack, si può vedere che è recursing molto. Questo non sembra essere l'intera traccia dello stack: quanto hai troncato? –

+0

Ho solo messo la causa dallo stack trace –

+0

In questa traccia dello stack non c'è alcuna indicazione del tuo codice, questo è il motivo per cui sto dicendo che lo hai troncato. Ad un certo punto ci dovrebbe essere una linea dal tuo codice (o una linea che indica qualcosa come ... 1234 più righe) –

risposta

5

si include questa $ JAVA_OPTS in ultima riga di codice, può il codice funziona

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

Grazie rajendra ... Ho ho scritto l'ultima riga in modo errato in catlina.sh l'ho cambiato. Ora funziona grazie. –