Selenium在Docker及AWS环境中是否存在页面崩溃时间限制?
Docker或AWS环境本身并没有强制的10分钟页面崩溃时间限制,但以下几个常见的配置或环境因素会导致你遇到的这种情况:
容器资源限制
Docker容器默认可能设置了CPU、内存的软/硬限制,当Selenium运行长时间任务时,Chrome或Firefox这类浏览器的内存占用会持续增长,触达容器内存上限后会被系统的OOM Killer直接杀死,表现为页面崩溃。
解决方式:启动容器时明确分配足够的内存,比如执行docker run -m 4g ...;同时在浏览器启动参数里添加内存限制,比如给Chrome加--memory=3g --memory-swap=3g。会话超时配置
如果你用了Selenium Grid,或者AWS托管的Selenium相关服务(比如Device Farm),这类服务通常有默认的会话超时设置,大多在10-15分钟左右,超时后会自动终止会话。
解决方式:如果是Selenium Grid,修改config.toml里的sessionTimeout参数,比如设为3600(1小时);如果是AWS的服务,直接在控制台调整会话超时时间。无头模式的资源泄漏
无头浏览器在长时间运行时容易出现内存泄漏,本地机器资源充足可能不会触发,但Docker/AWS的资源限制更严格,大概10分钟左右就会耗尽资源导致崩溃。
解决方式:不要长时间复用同一个浏览器会话,定期重启实例;添加浏览器启动参数减少内存占用,比如Chrome的--disable-extensions --disable-gpu --no-sandbox --disable-dev-shm-usage,其中--disable-dev-shm-usage可以规避Docker默认的/dev/shm空间过小的问题。AWS网络超时
要是在AWS EC2或EKS上运行,负载均衡器(ALB/NLB)默认有10分钟的空闲超时,当Selenium任务长时间没有网络交互(比如页面加载后等待操作),连接会被断开,进而导致会话终止。
解决方式:在负载均衡器配置里延长空闲超时时间,或者在代码里定期发送心跳操作(比如每隔几分钟刷新一个页面元素),保持连接活跃。
总结下来,优先排查容器资源限制,再检查会话超时配置,最后优化浏览器启动参数和网络设置,基本就能解决10分钟崩溃的问题。
内容的提问来源于stack exchange,提问作者Beşir Kassab

