scrapy 2.3 内存泄漏的常见原因
2021-06-17 11:14 更新
Scrapy开发人员传递请求中引用的对象(例如,使用 cb_kwargs
或 meta
属性或请求回调函数),它有效地将这些引用对象的生存期限制为请求的生存期。到目前为止,这是导致零碎项目内存泄漏的最常见原因,对于新手来说,这是一个很难调试的原因。
在大型项目中,蜘蛛通常是由不同的人编写的,其中一些蜘蛛可能会“泄漏”,从而在其他(写得好的)蜘蛛同时运行时影响其他蜘蛛,而这反过来又会影响整个爬行过程。
如果您没有正确地释放(以前分配的)资源,那么泄漏也可能来自您编写的定制中间件、管道或扩展。例如,在上分配资源 spider_opened
但不释放它们 spider_closed
如果你跑步,可能会引起问题 multiple spiders per process .
请求太多?
默认情况下,scrapy将请求队列保存在内存中;它包括 Request
对象和请求属性中引用的所有对象(例如 cb_kwargs
和 meta
)虽然不一定是泄漏,但这可能会占用大量内存。有可能 persistent job queue 有助于控制内存使用。
以上内容是否对您有帮助:
更多建议: