原文:http://blog.csdn.net/qq_28384353/article/details/52974432#reply  

将爬虫部署到服务器上运行后,在查看服务器的状态监控时发现,天猫爬虫执行一段时间后,CPU占用异常升高,内存也跟着爆炸,虽然程序没有中断,但是爬取速度已经变成龟速。查看日志,发现抛出了Java.lang.OutOfMemoryError: Javaheap space异常。

在服务器上通过jstack查到占用CPU最严重的五个线程里有四个竟然都是htmlunit下的webclient。

Google后找到原因,罪魁祸首是webclient创建后始终没有关闭,导致分配的内存始终无法被GC回收,最终引起outofmemory。

解决方法为在当前webclient使用结束后立即执行webclient.close(),或者设定在爬取一定次数后关闭webclient,虽然会对性能有一定影响,但是解决了内存泄漏的问题。

htmlunit 导致高cup占用的坑的更多相关文章

  1. htmlunit 导致高cup占用,一老内存溢出的解决办法

    原文:http://blog.csdn.net/qq_28384353/article/details/52974432#reply 将爬虫部署到服务器上运行后,在查看服务器的状态监控时发现,天猫爬虫 ...

  2. java高cup占用解决方案

    项目中发现java cpu占用高达百分之四百,查看代码发现有一个线程在空转,拉高了cup while(true){ } 解决方案,循环中加入延迟:Thread.sleep(Time): 总结下排查CP ...

  3. Android While 循环导致的资源占用过高进而导致程序崩溃问题

    Timeline: Activity_launch_request time:6562004-14 15:31:25.347: I/dalvikvm(3483): Total arena pages ...

  4. Windbg分析高内存占用问题

    1. 问题简介 最近产品发布大版本补丁更新,一商超客户升级后,反馈系统经常奔溃,导致超市的收银系统无法正常收银,现场排队付款的顾客更是抱怨声声.为了缓解现场的情况, 客户都是手动回收IIS应用程序池才 ...

  5. Java线上应用故障排查之二:高内存占用

    搞Java开发的,经常会碰到下面两种异常: 1.java.lang.OutOfMemoryError: PermGen space 2.java.lang.OutOfMemoryError: Java ...

  6. java高cpu占用和高内存占用问题排查 (转)

    高cpu占用 1.top命令:Linux命令.可以查看实时的CPU使用情况.也可以查看最近一段时间的CPU使用情况. 2.PS命令:Linux命令.强大的进程状态监控命令.可以查看进程以及进程中线程的 ...

  7. java线上应用故障排查之二:高内存占用【转】

    前一篇介绍了线上应用故障排查之一:高CPU占用,这篇主要分析高内存占用故障的排查. 搞Java开发的,经常会碰到下面两种异常: 1.java.lang.OutOfMemoryError: PermGe ...

  8. 解决WebBrowser控件会导致应用程序占用内存居高不下问题

    WebBrowser 是一个 .NET 控件类,在 .NET Framework 2.0 版中新增.WebBrowser 类使用户可以在窗体中导航网页,下面我们来看在开发中碰到WebBrowser控件 ...

  9. java cup占用高分析脚本

    [was@dmgr ita-scripts]$ vi java_analys.sh   PID=$1 ; ps -mp $PID -o THREAD,tid,time | awk -F " ...

随机推荐

  1. AdaBoost 算法原理及推导

    AdaBoost(Adaptive Boosting):自适应提升方法. 1.AdaBoost算法介绍 AdaBoost是Boosting方法中最优代表性的提升算法.该方法通过在每轮降低分对样例的权重 ...

  2. 关于String的相关常见方法

    package Stirng类; /** * String 常见的相关方法摘要 * @author Administrator * */ public class DemoStringMethod { ...

  3. UVa 10706 - Number Sequence

    题目大意:Sk表示从1到k的字符序列,如S4为1234,现如今有如下的序列S1S2...Sk,形如1 12 123 1234这样的序列,给一个数n,让你去这个序列第n个位置上的数字. 可以构建出一个S ...

  4. Bagging和Boosting 概念及区别

    Bagging和Boosting都是将已有的分类或回归算法通过一定方式组合起来,形成一个性能更加强大的分类器,更准确的说这是一种分类算法的组装方法.即将弱分类器组装成强分类器的方法. 首先介绍Boot ...

  5. PHP检测获取内存信息

    PHP也可以检测获取到Windows的内存信息,而且代码还挺简单,无意发现的,觉得以后能用上,在此与大家分享. 本代码将得到总内存.初始使用等内存信息: <?php echo "初始: ...

  6. mysql中游标的使用案例详解(学习笔记)

    1.游标是啥玩意?简单的说:游标(cursor)就是游动的标识,啥意思呢,通俗的这么说,一条sql取出对应n条结果资源的接口/句柄,就是游标,沿着游标可以一次取出一行.我给大家准备一张图: 2.怎么使 ...

  7. 让div显示在屏幕中央的css代码段

    .popup{ width:500px; height:400px; position:absolute; top:50%; left:50%; margin-top:-200px;     /*注意 ...

  8. Angular - - 脏值检查及其相关

    今天突然就想写写$digest和$apply,这些都是脏值检查的主体内容. 先以普通js来做一个简单的监控例子吧: var div = ducoment.getElementById("my ...

  9. 建立、配置和使用Activity——Activity

    Activity是Android应用中最重要.最常见的应用组件(此处的组件是粗粒度的系统组成部分,并非指界面控件:widget).Android应用的一个重要组成部分就是开发Activity,下 面将 ...

  10. 在ASP.NET MVC中使用 Bootstrap table插件

    Bootstrap table: http://bootstrap-table.wenzhixin.net.cn/zh-cn/getting-started/ 1. 控制器代码: using Syst ...