JVM -记一次堆内存泄露

项目 - 学校爬虫项目

说明:学区房项目是私人项目,主要是爬取网络上的学校作为基础数据,给用户综合展示并且作为学区参考。

根据数据结构不同该项目分为爬取学校列表和学校详情两部分。这次出现内存泄露以及CPU飙升至卡死的情况是在爬取学校详情时出现的。该类问题在本地idea调试时不会出现,部署至线上才发生。

具体表现为爬取数据项目开启后不久,cpu使用率直接升至200%左右,不久项目即报错堆内存泄露。

  • 解决办法一:启动项目时加大内存Xmx从原先的256m修改至2048m, Xss从128k修改至1024k;
    启动后学校从开始拉取20个左右崩溃,坚持到拉取40个左右崩溃。治标不治本,解决失败。

  • 解决办法二:从代码中找问题。
    1> 经检查,在爬取学校详情中,使用Jsoup解析html时做了大量的css选择器获取数据,在选择css样式时使用了类似下图的css魔法值,因为详情涉及学校详情、学校评论、学校话题等相关数据,所以在优化完该解析类后将类私魔法值写成静态类共200余条。
    在这里插入图片描述
    部署上线后cpu仍然居高不下,在爬取200个学校左右崩溃,感觉快找到事情的真相了

    2> 继续检查代码,在解析网页获取html的代码中,发现问题。

    我使用两种方法获取html数据:
    第一种传统的创建httpClient去根据url获取html数据 ,优点没有多余日志,简单粗暴,应用广泛。缺点:无法获取网页上经过js获取数据后再渲染到网页的数据。
    第二种WebClient获取,缺点是会打印好多不知所云的日志,至今我还没找到完全关闭这些日志的办法,目前只能关闭一大部分。优点就是可以解析网页上的js数据然后完全获取网页html,再供我继续使用jsoup去解析。

    就是在使用WebClient后没有调用close处理,参考
    链接: Fix HtmlUnit Memory Leak.

目前项目可以正常爬取数据,但是还有遗留问题待解,通过使用分析jvm发现该项目full gc的频率很快,还需要进一步分析dump文件

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值