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

Selenium ChromeDriver在AWS EKS异常,本地正常的问题求助

问题分析与解决方案

核心原因

  1. user-data-dir 唯一性不足:用int(time.time())作为后缀,高并发场景下同一秒可能生成重复目录名,导致目录占用冲突。
  2. 进程回收不彻底:手动递归杀进程的方式可能遗漏Chrome子进程,或因权限/进程状态问题无法彻底终止,形成僵尸进程并持有目录锁。
  3. 容器资源限制:EKS Pod的CPU/内存配额不足,导致Chrome进程异常崩溃,进而无法正常清理目录和进程。
  4. 文件系统权限问题:在当前工作目录创建数据目录可能受挂载卷权限限制,且未及时清理旧目录,导致资源耗尽。

具体解决步骤

1. 确保user-data-dir绝对唯一且存储在临时目录

放弃时间戳,改用UUID生成唯一目录名,并将目录放在容器的/tmp(通常为tmpfs,容器重启后自动清理),避免挂载卷的权限问题:

import uuid
import os

# 生成唯一临时目录,放在/tmp下
self.tmp_dir = os.path.join("/tmp", f"chrome_data_{uuid.uuid4()}")
os.makedirs(self.tmp_dir, exist_ok=True)

# 配置Chrome选项
options.add_argument(f"user-data-dir={self.tmp_dir}")

2. 完善进程与资源清理逻辑

用try/finally确保driver.quit()必执行,结合psutil精准清理关联进程,并在清理后删除临时目录:

import psutil
import shutil

def cleanup(driver, tmp_dir):
    # 先尝试正常退出driver
    try:
        if driver:
            driver.quit()
    except Exception:
        pass
    
    # 清理关联的Chrome/Chromedriver进程(仅当前进程的子进程)
    current_pid = os.getpid()
    for proc in psutil.process_iter(['pid', 'name', 'ppid']):
        try:
            if proc.info['ppid'] == current_pid and proc.info['name'] in ['chrome', 'chromedriver', 'google-chrome']:
                proc.kill()
                proc.wait()  # 等待进程彻底终止
        except (psutil.NoSuchProcess, psutil.AccessDenied):
            pass
    
    # 删除临时目录
    try:
        shutil.rmtree(tmp_dir)
    except Exception:
        pass

# 使用示例:在处理URL的逻辑中
driver = None
try:
    # 初始化driver和处理URL的逻辑
    driver = webdriver.Chrome(options=options)
    # ... 处理URL ...
finally:
    cleanup(driver, self.tmp_dir)

3. 复用WebDriver实例减少开销

避免为每个URL创建新的driver实例,改为复用一个driver处理多个URL,仅在全部任务完成后退出:

# 初始化一次driver
driver = webdriver.Chrome(options=options)
try:
    for url in url_list:
        driver.get(url)
        # ... 处理当前URL数据 ...
finally:
    cleanup(driver, self.tmp_dir)

这种方式大幅减少进程创建/销毁次数,从根源降低目录冲突和僵尸进程的概率。

4. 调整EKS Pod资源配置

为Job的Pod设置足够的资源请求与限制,Chrome headless模式建议至少分配:

resources:
  requests:
    cpu: "1"
    memory: "1Gi"
  limits:
    cpu: "2"
    memory: "2Gi"

资源不足会导致Chrome进程频繁崩溃,进而引发进程和目录清理失败。

5. 验证Chrome与Chromedriver版本一致性

确保EKS容器中安装的Chrome和Chromedriver版本完全匹配(主版本号必须一致),版本不匹配会导致会话创建异常和进程管理混乱。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.13 11:09:50