如何使用htmlunit解析Java堆空间

时间:2015-09-09 08:48:12

标签: java multithreading htmlunit heap-memory

我们有一个多线程应用程序,用于从各种网站抓取数据。我们使用htmlunit下载某些网站的内容。 内存不足错误的问题突然开始出现。我们的应用程序在部署服务器中使用30个线程。

我们在部署中使用了以下内容:

htmlunit-2.12.jar
htmlunit-core-js-2.12.jar
Java: Java(TM) SE Runtime Environment (build 1.7.0_79-b15)

对于tomcat,我们使用以下参数:

-Xms1024m -Xmx3584m 
-XX:+UseConcMarkSweepGC
-XX:PermSize=256m -XX:MaxPermSize=256m

继续: CentOS版本6.3(4GB RAM)

关于与htmlunit相关的Java堆内存的各种建议,我试过:

  1. 从Java(TM)SE运行时环境更改为OpenJDK运行时环境。
  2. 使用过的webClient.closeAllWindows();哪里有必要。
  3. 没有发现这些变化。应用程序在10分钟内使用整个堆。 我们如何克服内存不足错误问题?

    编辑:更新到htmlunit-2.16.jar后,我们在垃圾收集方面得到了改进。 (连同OpenJDK)

    enter image description here

    之前:(使用htmlunit-2.12.jar和Java(TM)SE运行时环境(版本1.7.0_79-b15)) enter image description here

    htmlunit的版本是否会导致问题?

    修改 在应用程序的遗留代码中,webClient在某些特定情况下未被关闭,这导致创建webClient对象,因此堆大小增加。但即使在关闭webclient并使其为null之后,堆空间问​​题仍然存在。

    如何解决此内存堆问题?

1 个答案:

答案 0 :(得分:0)

您在抓取时如何存储数据?

您是否将其全部保存在内存模型中?或者你正在写入磁盘/数据库?

如果将其全部留在记忆中可能是问题。

另外,您只处理text / html还是处理图像?