zoukankan      html  css  js  c++  java
  • aws上部署scrapy,出现 Out of Memory,内存溢出

    来源:http://www.aisir.cn/2017/07/11/aws%E4%B8%8A%E9%83%A8%E7%BD%B2scrapy%E5%87%BA%E7%8E%B0-out-of-memory%EF%BC%8C%E5%86%85%E5%AD%98%E6%BA%A2%E5%87%BA/

    项目部署在亚马逊服务器上,每小时爬去广告数据,运行一段时间后,内存溢出,贴图为证

    这几天跟着小伙伴一起做项目,碰到不少平时碰不到的技术问题,真是很好玩的一件事。比如Scrapy这个爬虫框架的的内存泄露问题就是一个很让人头疼的问题。

    历来OOM(OOM - Out of Memory,内存溢出)问题都是项目里最棘手的问题,这种问题debug的难度很大,原因在于问题不太好定位。因为OOM的成因往往比较复杂,不合理的对象创建,数据结构使用的不合理性,分布式架构中各系统的配合不好等情况,都有可能出现这个问题。

    而爬虫这个任务,涉及网站各个页面的遍历,通常会在网站抓去期间产生大量的HTTP Request,而Request的处理往往是通过任务队列来处理的。由于不是网站的所有的页面都要抓去,但我们几乎需要遍历大部分的页面,再考虑并发的情况,爬虫任务开始后,往往会有大量的pending request进入队列。而这些队列,框架对其最常见的处理方式是放在内存中,因此,当要抓去的页面层次位于网站的较深层时,这个队列的内存占用到了任务的中后期会变得非常可观。

    我的解决方案:

    运行单次抓取任务,发现内存占用近 1G

    1、加大实例内存

    2、减小插入s3的thread并发数目

  • 相关阅读:
    字符串的操作
    10.20 整理1
    if else; while; break;continue ----流程控制系列
    10.19 重新打了第一天的代码(课件))
    10.17
    svn,导入数据到版本库及使用工作副本
    mysql的反引号backtick
    css中的1px并不等于设备的1px
    onclick事件属性与在用js绑定onclick事件中的this的区别
    一次对CI框架update方法底层实现的探索之旅
  • 原文地址:https://www.cnblogs.com/aisir/p/7183231.html
Copyright © 2011-2022 走看看