fix: EasyOCR内存不足时强制CPU模式,避免CUDA加载导致系统冻结
- monitor.py: 内存阈值从2GB提高到3GB,CUDA加载torch需要大量内存 - easyocr_worker.py: 新增物理内存预检(3GB阈值),不足时强制CPU模式 - easyocr_worker.py: _init_reader()再次检查物理内存,双重保障 - 改进错误日志:记录内存详细信息(总量、使用率) - 解决:内存不足时仍加载CUDA导致电脑冻结的问题
This commit is contained in:
+7
-5
@@ -1424,19 +1424,21 @@ class MessageMonitor:
|
||||
# ⭐ EASYOCR_WORKER=1: 让 main.py 检测到 worker 模式,跳过 GUI 初始化
|
||||
_worker_env["EASYOCR_WORKER"] = "1"
|
||||
|
||||
# 内存检测:可用内存 < 2GB 时强制CPU模式,防止OOM崩溃
|
||||
# 内存检测:可用内存 < 3GB 时强制CPU模式,防止CUDA加载导致冻结
|
||||
# CUDA加载torch需要大量内存,物理内存不足时强制使用页面文件会导致系统冻结
|
||||
try:
|
||||
mem = psutil.virtual_memory()
|
||||
available_gb = mem.available / (1024**3)
|
||||
if available_gb < 2.0:
|
||||
if available_gb < 3.0:
|
||||
_worker_env["EASYOCR_FORCE_CPU"] = "1"
|
||||
logger.warning(f"[ocr] 可用内存不足({available_gb:.1f}GB),EasyOCR 子进程强制CPU模式")
|
||||
logger.warning(f"[ocr] 可用内存不足({available_gb:.1f}GB/总{mem.total / (1024**3):.1f}GB,"
|
||||
f"使用{mem.percent}%),EasyOCR 子进程强制CPU模式(避免CUDA加载冻结)")
|
||||
elif self._easyocr_cuda_oom_count >= 2:
|
||||
# ⭐ 连续 CUDA OOM/kernel error → 强制 CPU 模式启动(显存不足时防冻结)
|
||||
_worker_env["EASYOCR_FORCE_CPU"] = "1"
|
||||
logger.warning("[ocr] EasyOCR 连续CUDA错误≥2次,本次强制 CPU 模式启动 worker")
|
||||
except Exception:
|
||||
pass # 获取内存失败不阻断
|
||||
except Exception as e:
|
||||
logger.debug(f"[ocr] 获取内存信息失败({e}),不阻断启动")
|
||||
|
||||
self._easyocr_proc = subprocess.Popen(
|
||||
[sys.executable, '-u', worker_path],
|
||||
|
||||
Reference in New Issue
Block a user