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

Selenium脚本部署至Google Cloud与Heroku后内存超限报错如何解决

Selenium配置优化

这是降低内存占用最有效的手段,优先调整启动参数:

  • 启用新版无头模式:options.add_argument("--headless=new"),相比旧版无头模式内存占用降低15%以上
  • 禁用平台不需要的特性:
    options.add_argument("--no-sandbox")
    options.add_argument("--disable-dev-shm-usage") # 核心配置,解决PaaS平台共享内存不足的问题
    options.add_argument("--disable-gpu")
    options.add_argument("--disable-extensions")
    options.add_argument("--disable-plugins")
    options.add_argument("--disable-images") # 非必要场景直接禁用图片加载,内存占用直接砍半
    
  • 优化页面生命周期管理:每处理完1个页面调用driver.delete_all_cookies()清理缓存,每处理5~10个页面直接重启driver实例释放所有残留内存,不要累计打开多个标签页。

平台配置调整

Google Cloud

  • 默认F1实例仅256M内存完全无法支撑Selenium运行,修改app.yaml升级实例规格:
    runtime: python39
    instance_class: F2 # 最低要求,对应512M内存,爬取页面多的话升级到F4(1G内存)
    automatic_scaling:
      max_instances: 1
    
  • 若使用Cloud Functions部署,将内存配置至少调整到1G,超时时间设置为大于全量页面爬取所需的时长。

Heroku

  • 免费Dyno仅512M内存,升级到Hobby及以上规格(≥1G内存)
  • 优化Procfile配置,限制worker数量避免多余内存占用:
    web: gunicorn main:app --workers 1 --threads 2 --max-requests 20 --max-requests-jitter 5
    
    max-requests参数会让worker处理完指定请求后自动重启,自动释放累计占用的内存。

代码与依赖优化

  • 爬取结果不要全部缓存到内存变量中,每处理完单个页面就将数据持久化到存储介质(文件、数据库等)
  • 清理requirements.txt中无关的依赖包,仅保留运行必须的组件,如selenium、对应浏览器的驱动包、web框架(如有)
  • 移除所有debug级别的冗余日志输出,避免日志内容占用内存。

内容的提问来源于stack exchange,提问作者Vaibhav Somani

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 12:45:03