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

Celery+Selenium启动Chrome崩溃问题排查与修复求助

问题排查与修复方案

针对Celery批量启动Chrome实例运行2天后出现WebDriverException: unknown error: Chrome failed to start: crashed. (unknown error: DevToolsActivePort file doesn't exist)的问题,提供以下排查与修复方法:

一、原因排查方法

  • 检查Chrome进程残留:执行ps aux | grep chrome查看是否存在大量僵死的Chrome/chromedriver进程。即便Celery终止任务,也可能出现Selenium未彻底清理进程的情况,残留进程会占用端口或系统资源,导致新实例无法启动。
  • 验证DevTools端口占用:使用lsof -i :9222(默认DevTools端口)查看端口占用状态。若任务中指定了固定DevTools端口,端口被占会直接导致Chrome启动失败。
  • 排查系统细项资源:
    • 查看文件句柄限制:执行ulimit -n,Chrome每个实例会占用多个文件句柄,长期运行可能耗尽上限。
    • 检查磁盘空间:确认/tmp目录是否已满,Chrome会在该目录存放临时文件,空间不足会引发启动崩溃。
  • 确认版本兼容性:检查Chrome浏览器与chromedriver版本是否严格匹配,版本不兼容可能导致长期运行中的偶发崩溃。
  • 核对任务清理逻辑:检查Celery任务是否在结束时明确调用driver.quit()(而非仅driver.close()),添加日志记录资源清理步骤,确认是否存在清理失败的任务。

二、修复方案

  • 强制清理Chrome进程:在任务结束时,除正常退出Selenium,额外强制杀死关联进程,避免残留:
    import os
    import signal
    from selenium import webdriver
    
    def celery_task():
        driver = webdriver.Chrome()
        try:
            # 业务逻辑代码
            pass
        finally:
            driver.quit()
            # 强制终止Chrome进程
            chrome_pid = driver.service.process.pid
            os.kill(chrome_pid, signal.SIGTERM)
    
  • 优化Chrome启动参数:添加避免冲突和资源占用的参数:
    options = webdriver.ChromeOptions()
    options.add_argument('--headless=new')  # 无头模式降低资源消耗
    options.add_argument('--no-sandbox')
    options.add_argument('--disable-dev-shm-usage')  # 规避/dev/shm空间不足问题
    options.add_argument('--remote-debugging-port=0')  # 随机分配端口,避免冲突
    options.add_argument(f'--user-data-dir=/tmp/chrome-profiles/{os.getpid()}')  # 每个任务独立缓存目录
    driver = webdriver.Chrome(options=options)
    
  • 调整Celery配置:限制并发数与worker生命周期,避免资源泄漏:
    CELERYD_MAX_TASKS_PER_CHILD = 10  # 每个worker处理10个任务后重启
    CELERYD_CONCURRENCY = 8  # 根据服务器配置调整并发数,避免过载
    
  • 提升系统资源限制:
    • 修改/etc/security/limits.conf,添加:
      * soft nofile 65535
      * hard nofile 65535
      
      重启系统后生效,提升文件句柄上限。
    • 设置Cron定时任务,定期清理/tmp下的Chrome临时文件,避免磁盘空间耗尽。
  • 同步Chrome与chromedriver版本:确保两者版本完全匹配,若当前版本存在长期运行bug,尝试升级至稳定版或回退至无问题的历史版本。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 12:10:35