Scrapy-Reids 内存占用过高问题
在使用网上盛传的 BloomFilter 降低 Redis 内存使用之后,一开始效果还行,内存使用增长比以前慢一点,但是随着请求数量的增多,虽然 filter 内存占用减少了,但是请求占用的内存随着请求的增多爆炸式增长。
scrapy-redis 内存大致使用在三个方面:
- scrapy 运行过程中使用的内存
- redis 数据库中 filter 占用的内存
- redis 数据库中 请求占用的内存
尽量降低内存使用办法:
- scrapy 运行过程中使用的内存,在编写爬虫时,注意一下内存泄露。
- filter 按照网上的教程,将默认的filter 修改成 BloomFilter。
- 控制 redis 中请求的数量。 关于请求数量控制问题,网上没有很好的解决办法(也许是我没找到),解决这个问题,只能从源码中下手了。
思路:在 Scrapy 推送请求到 redis 数据库之前,判断redis数据库中请求的数量,如果达到一个峰值,在推送之前或者推送之后,从数据库中拿一个请求出来请求数据。
在源码里摸爬滚打就不唠叨了,直接上教程。
源码分析
scrapy/core/engine.py
文件123 ~ 125 行的 while 循环作用是不停的从队列(redis数据库)里取一个请求出来下载请求。
Original: https://blog.csdn.net/qq_24047235/article/details/118570828
Author: 吟一句君埋泉下泥销骨
Title: 解决 Scrapy-redis内存占用过高问题(不仅仅使用 BloomFilter 优化 scrapy-redis 去重)
原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/789568/
转载文章受原作者版权保护。转载请注明原作者出处!