You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Scrapy爬虫运行时监控并输出内存使用情况?

Scrapy爬虫内存监控解决方案

问题1:在爬虫代码中实时输出内存使用

可以借助psutil库直接获取当前爬虫进程的内存数据,在代码中按需输出:

  1. 先在项目的requirements.txt中添加psutil,确保Heroku部署时能安装该依赖
  2. 在爬虫代码中实现内存获取函数,然后在需要监控的位置调用:
import psutil
import os

def get_current_memory():
    process = psutil.Process(os.getpid())
    # 转换为MB单位,保留两位小数
    mem_usage_mb = process.memory_info().rss / (1024 * 1024)
    return f"爬虫当前内存占用:{mem_usage_mb:.2f} MB"

# 在parse回调中调用示例
def parse(self, response):
    print(get_current_memory())
    # 你的爬取逻辑代码...

如果想实现自动周期性输出,还可以编写Scrapy扩展,每隔指定请求数或时间自动打印内存数据,不用手动在每个回调中添加。

问题2:查看运行中爬虫的内存使用量

用Heroku官方工具精准查看

  • 执行heroku ps:top命令,这是Heroku官方提供的dyno进程监控工具,能直接看到当前运行的Python爬虫进程的CPU、内存实时占用数据,比本地top更准确——本地环境和Heroku dyno的资源限制、系统配置差异很大,内存增长速度自然不一致。
  • 配合实时日志监控:执行heroku logs --tail,如果已经开启MEMUSAGE_ENABLED=True,日志中会定期输出Scrapy内置的内存统计,再加上代码中psutil的输出,能实现全方位监控。

确认目标进程

如果heroku ps:top中出现多个Python进程,可通过进程的命令行参数区分:你的爬虫是通过scrapy crawl [爬虫名]启动的,进程列表中会显示完整启动命令,直接对应目标爬虫。

本地与Heroku内存增长不一致的常见原因:

  • Heroku dyno有严格内存阈值,接近限制时会触发内存压缩或OOM回收,改变内存增长曲线
  • 本地与Heroku的Python版本、依赖包版本存在细微差异
  • 网络环境不同导致爬取队列、缓存的数据量有差异

内容的提问来源于stack exchange,提问作者Allen Y

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.21 10:11:03