diff --git a/app/workers/extract_worker.py b/app/workers/extract_worker.py index f4be88f..45eda91 100644 --- a/app/workers/extract_worker.py +++ b/app/workers/extract_worker.py @@ -55,17 +55,9 @@ async def process(document_id: int, session: AsyncSession) -> None: return # kordoc 파싱 (HWP/HWPX/PDF) + # OOM 방지는 docker-compose.yml의 kordoc-service mem_limit으로 통제. + # 파일 크기 제한 없음 — 텍스트 PDF는 크기와 무관하게 파싱 가능. if fmt in KORDOC_FORMATS: - # 25MB 초과 파일은 kordoc in-memory 파싱 시 OOM 크래시 위험 → 스킵 - KORDOC_SIZE_LIMIT = 25 * 1024 * 1024 - if (doc.file_size or 0) > KORDOC_SIZE_LIMIT: - size_mb = (doc.file_size or 0) / (1024 * 1024) - doc.extracted_text = "" - doc.extracted_at = datetime.now(timezone.utc) - doc.extractor_version = f"skip_oversize_{size_mb:.0f}mb" - logger.warning(f"[kordoc] {doc.file_path} ({size_mb:.1f}MB) — 25MB 초과, kordoc OOM 방지로 스킵") - return - # 컨테이너 내부 경로: /documents/{file_path} container_path = f"/documents/{doc.file_path}" # 대형 PDF 대응: 10MB당 60초, 최소 60초 최대 300초 diff --git a/docker-compose.yml b/docker-compose.yml index 36f0bd1..918187c 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -23,6 +23,8 @@ services: - "3100:3100" volumes: - ${NAS_NFS_PATH:-/mnt/nas/Document_Server}:/documents:ro + mem_limit: 4g + memswap_limit: 4g healthcheck: test: ["CMD", "node", "-e", "fetch('http://localhost:3100/health').then(r=>{process.exit(r.ok?0:1)}).catch(()=>process.exit(1))"] interval: 10s