scrapy 怎么提升速度?该如何排查瓶颈呢?

2018-11-30 17:03:40 +08:00
 find456789

我目前要爬一个网站, 数据量 20 亿,爬完存入数据库

爬虫框架用的 scrapy 最新版,url 都是已知的,直接爬,如果有需要的信息,就提取出保存到数据库,没有需要的信息就继续爬下一个 url

使用 scrapy-redis 分布式爬,目前有 10 台机器

(对方网站没有反爬措施,我可以随心而欲,也不用担心对方会被爬死)

现在,所有机器加起来,总共每秒只能处理处理 500-1000 条,那么 20 亿处理完需要大约 1 个月,我想尽可能的缩短这个时间

我尝试修改 scrapy 的配置文件,把 CONCURRENT_REQUESTS 修改成了 500,速度似乎有所提升


我的 redis 服务器( 2 个 vCPU,5GB 内存)

cpu 维持在 15%左右, 传入字节 160kb/s,传出 100kb/s, 网络数据包 800/s, 磁盘写入 800kb/s, 磁盘写入 4 次 /s 这些数据似乎都不是很高,说明瓶颈可能不在 redis 上(我猜的,因为我不太懂 redis )


我的数据库 1G 内存,最大允许 100 个连接数

内存 45%左右,cpu 1%左右,数据库连接数 10 个


我的 9 台爬虫机器( 1 个 vCPU,3.75GB 内存)

cpu 维持在 70%左右 网络字节数 60kb/s, 网络数据包 200/s, 磁盘写入 20kb/s

另外一台机器,配置更好,( 2 个 vCPU,7.5 GB 内存)

cpu 维持在 10%, 其他数据更低


想问问,除了加机器,还有什么具体的速度优化方案吗?

应该如何排查瓶颈呢?

如何最大化压榨这些机器的性能呢?

非常感谢

1823 次点击
所在节点    问与答
8 条回复
x66
2018-11-30 17:08:54 +08:00
Mark,关注一下,或许一台机器上多部署几个也算一个方案?
find456789
2018-11-30 17:11:29 +08:00
@x66 谢谢 我试试
PulpFunction
2018-11-30 17:15:40 +08:00
啥 20 亿数据能不设防?
lerry
2018-11-30 17:21:13 +08:00
瓶颈会不会在网站性能
dongisking
2018-11-30 17:31:05 +08:00
Mark
miniliuke
2018-11-30 17:39:23 +08:00
换了 python 可能会快点,不是说是 python 的坑,是你的代码的问题,最好排查一下......怀疑你处理没有做多线程或异步,还有 python 的多线程的 cpu 性能也是有限制的
find456789
2018-11-30 17:41:24 +08:00
@lerry 应该不会
find456789
2018-11-30 17:42:19 +08:00
@miniliuke 谢谢 用的是 scrapy 这个框架,各方面应该不会很差, 应该是我不会配置 目前还是维持在 400 个 url/s ,要想办法突破 1k 才行

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/513138

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX