Java HtmlUnit内存不足,可能会泄漏内存

Java HtmlUnit内存不足,可能会泄漏内存,java,selenium,htmlunit,Java,Selenium,Htmlunit,我将Selenium与启用javascript的HtmlUnitDriver一起使用,并且出现内存不足错误(我使用Java)。我只是浏览同一页。我只使用一个GET命令。克服这种情况的解决方案是什么?通过将以下内容添加到启动Selenium运行的JVM的java命令行,为JVM提供更多内存: -Xmx512m 本例给出JVM的最大容量为512 Mb 这取决于您运行Selenium的位置。如果是maven,您可以将其添加到maven\u OPTS环境变量中;如果是Eclipse,您需要编辑测试类的

我将Selenium与启用javascript的HtmlUnitDriver一起使用,并且出现内存不足错误(我使用Java)。我只是浏览同一页。我只使用一个GET命令。克服这种情况的解决方案是什么?

通过将以下内容添加到启动Selenium运行的JVM的java命令行,为JVM提供更多内存:

-Xmx512m
本例给出JVM的最大容量为512 Mb


这取决于您运行Selenium的位置。如果是maven,您可以将其添加到
maven\u OPTS
环境变量中;如果是Eclipse,您需要编辑测试类的运行配置,等等。

我遇到了类似的问题。它最终成为一个自动加载帧的问题。。。无法禁用的功能

看看这个:

这可能会有帮助

更新

HtmlUnit的当前版本是2.10。我从2.8版开始使用HtmlUnit,每个新版本都消耗了更多内存。我已经到了一个地步,在启用javascript的情况下获取5个页面会导致一个2GB的进程

从javascript的角度来看,有很多方法可以改善这种情况。然而,当你不能修改javascript时(例如:如果你正在抓取一个站点),你就束手无策了。当然,禁用javascript是最好的方法。但是,这可能会导致获取的页面与预期页面不同

不过,我确实克服了这种情况。经过多次测试,我注意到这可能不是HtmlUnit的问题(我从一开始就认为HtmlUnit是有罪的)。它似乎是JVM。从Sun的JVM到OpenJDK的转换成功了,现在这个过程不再消耗2GB内存,只需要200MB。我正在添加版本信息

Sun(Oracle)的32位JVM:

$java -version
java version "1.6.0.26"
Java(TM) SE Runtime Environment (build 1.6.0_26-b03)
Java HotSpot(TM) Server VM (build 20.1-b02, mixed mode)
$java -version
java version "1.6.0_18"
OpenJDK Runtime Environment (IcedTea6 1.8.13) (6b18-1.8.13-0+squeeze2)
OpenJDK Server VM (build 14.0-b16, mixed mode)
OpenJDK 32位JVM:

$java -version
java version "1.6.0.26"
Java(TM) SE Runtime Environment (build 1.6.0_26-b03)
Java HotSpot(TM) Server VM (build 20.1-b02, mixed mode)
$java -version
java version "1.6.0_18"
OpenJDK Runtime Environment (IcedTea6 1.8.13) (6b18-1.8.13-0+squeeze2)
OpenJDK Server VM (build 14.0-b16, mixed mode)
操作系统:

$ uname -a
Linux vostro1015 2.6.32-5-686-bigmem #1 SMP Sun May 6 04:39:05 UTC 2012 i686 GNU/Linux
请分享您的经验。

与HtmlUnit相关:

不要忘记调用
webClient.closeAllWindows()。我总是把它放在我使用webclient的区域周围的
最后
-块中。通过这种方式,可以确保停止所有javascript,释放所有资源

网络客户端的设置也很有用:

    webClient.setJavaScriptTimeout(JAVASCRIPT_TIMOUT);
    webClient.setTimeout(WEB_TIMEOUT);
    webClient.setCssEnabled(false);  // for most pages you do not need css to be enabled
    webClient.setThrowExceptionOnScriptError(false); // I never want Exceptions because of javascript
JAVASCRIPT\u TIMOUT
不应过高长时间运行的JAVASCRIPT可能是内存问题的原因之一。
WEB\u TIMEOUT
想想你想等待多长时间。

我已经尝试过了。但只会再持续一些时间,直到内存不足……我绝对相信我会寻找另一种解决方案……谢谢你可能想发布更多详细信息。如果在增加JVM的可用内存后,内存仍然不足,那么听起来您没有正确地处理某些内容。我完全同意您的看法。通过增加内存,只会延迟内存不足错误。