我们有一个多线程应用程序,用于从各种网站抓取数据。我们使用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堆内存的各种建议,我试过:
没有发现这些变化。应用程序在10分钟内使用整个堆。 我们如何克服内存不足错误问题?
编辑:更新到htmlunit-2.16.jar后,我们在垃圾收集方面得到了改进。 (连同OpenJDK)
之前:(使用htmlunit-2.12.jar和Java(TM)SE运行时环境(版本1.7.0_79-b15))
htmlunit的版本是否会导致问题?
修改 在应用程序的遗留代码中,webClient在某些特定情况下未被关闭,这导致创建webClient对象,因此堆大小增加。但即使在关闭webclient并使其为null之后,堆空间问题仍然存在。
如何解决此内存堆问题?
答案 0 :(得分:0)
您在抓取时如何存储数据?
您是否将其全部保存在内存模型中?或者你正在写入磁盘/数据库?
如果将其全部留在记忆中可能是问题。
另外,您只处理text / html还是处理图像?