Heroku部署Selenium WebDriver应用报R15内存配额超限如何解决
提升Heroku Dyno内存的操作方法
- 进入Heroku对应应用的「资源」管理页,点击当前dyno类型旁的修改按钮
- 选择更高配置的实例规格:基础Hobby实例仅配512MB内存,可按需升级到Standard-1X(1GB内存)、Standard-2X(2GB内存)或Performance系列更高配实例
- 保存配置后重启应用即可生效,高规格实例会产生额外服务费用
Selenium内存优化方案(优先尝试,无需额外付费)
- 启动无头浏览器时添加内存优化参数,Chrome配置示例如下:
--no-sandbox --disable-dev-shm-usage --disable-gpu --disable-extensions --disable-infobars --headless=new --no-first-run --no-default-browser-check
其中--disable-dev-shm-usage为必加参数,Heroku dyno的共享内存分区默认容量极小,关闭共享内存使用可解决绝大多数场景下的内存溢出问题。
- 任务执行完成后必须调用
driver.quit()彻底销毁浏览器进程,避免残留僵尸进程占用内存;长时间运行的任务可设置定时重启driver的逻辑 - 降低浏览器并发启动数量,单512MB内存的dyno最多同时运行1个浏览器实例
- 可替换为内存占用更低的无头Firefox,同等任务下内存占用比Chrome低30%左右
替代实现方案
- 如果业务场景不需要渲染JS、模拟交互,可直接替换Selenium为HTTP请求库+HTML解析器的组合,内存占用仅为Selenium方案的1/10
- 拆分任务架构,将Selenium相关的计算逻辑迁移到专门的无头浏览器服务运行,主应用仅做任务调度,无需在Heroku内部运行浏览器进程
报错参考

内容的提问来源于stack exchange,提问作者Adam Demo_Fighter
相关产品推荐
相关产品推荐

