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 5max-requests参数会让worker处理完指定请求后自动重启,自动释放累计占用的内存。
代码与依赖优化
- 爬取结果不要全部缓存到内存变量中,每处理完单个页面就将数据持久化到存储介质(文件、数据库等)
- 清理
requirements.txt中无关的依赖包,仅保留运行必须的组件,如selenium、对应浏览器的驱动包、web框架(如有) - 移除所有debug级别的冗余日志输出,避免日志内容占用内存。
内容的提问来源于stack exchange,提问作者Vaibhav Somani
相关产品推荐
相关产品推荐

