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:
youpaishidifu
2026-08-04 12:18:54 +08:00
parent 7d8d39f7b6
commit a3b0e35581
2 changed files with 46 additions and 7 deletions
+7 -5
View File
@@ -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],