2013-04-05 28 views
6

Tôi đang sử dụng HtmlUnit để đăng nhập vào một trang web và sau đó tải dữ liệu từ bảngOutOfMemoryError trong khi sử dụng HtmlUnit để tháo dỡ

Khi tôi chạy mã của tôi là đang gây ra java.lang.OutOfMemoryError Và không thể chạy thêm.

Tiếp theo là mã của tôi:

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

và Dưới đây là 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) 

Tôi đã đưa dòng follwoing trong tập tin catlina.sh để phân phối bộ nhớ heap Nhưng vẫn Tôi nhận được lỗi tương tự (Dung lượng RAM của tôi là 2GB).

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

Nhìn vào vết đống, bạn có thể thấy rằng nó recursing rất nhiều. Điều này dường như không phải là toàn bộ dấu vết ngăn xếp - bạn cắt ngắn bao nhiêu? –

+0

Tôi chỉ đặt nguyên nhân từ dấu vết ngăn xếp –

+0

Trong ngăn xếp ngăn xếp này không có chỉ dẫn mã của bạn, đây là lý do tại sao tôi nói rằng bạn đã cắt ngắn nó. Tại một số điểm nên có một dòng từ mã của bạn (hoặc một dòng cho thấy một cái gì đó giống như ... 1234 dòng nhiều hơn) –

Trả lời

5

bạn bao gồm $ này JAVA_OPTS tại dòng cuối cùng của mã, có thể mã của bạn hoạt

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

Cảm ơn rajendra ... Tôi có viết dòng cuối cùng không chính xác trong catlina.sh Tôi đã thay đổi nó. Bây giờ nó là làm việc nhờ. –

Các vấn đề liên quan