피드로 돌아가기
Dev.toBackend
원문 읽기
서버 환경에서 Chrome의 과도한 메모리 소비를 플래그 최적화와 리소스 필터링으로 해결하는 기법
Headless Chrome: Mastering Server-Side Resource Orchestration and Memory Optimization
AI 요약
Context
Chrome는 보안과 안정성을 위해 설계된 다중 프로세스 아키텍처를 채택하고 있다. 서버 컨테이너 환경에서 각 인스턴스는 브라우저 프로세스, GPU 프로세스, 네트워크 서비스 프로세스, 복수의 렌더러 프로세스를 동시에 생성한다. 불필요한 리소스 필터링 없이 페이지 전체를 로드하면 Render Process Zombie 현상으로 메모리가 누적된다.
Technical Solution
- [Chrome 런처] → [--disable-extensions, --disable-dev-shm-usage, --single-process 등 플래그 조합으로 메모리 기본값 축소]
- [리소스 요청] → [setRequestInterception으로 image, font, stylesheet, media 차단]
- [인스턴스 관리] → [Warm Pool 패턴으로 요청별.launch() 오버헤드 제거]
- [탭 메모리] → [동시 탭 수 제한으로 M = k × B + ΣT 공식 기반 총 소비량 통제]
- [재난 복구] → [finally 블록에서 page.close()와 browser.close() 강제 실행]
Impact
CSS와 이미지를 차단하면 Renderer Process 메모리 사용량이 60~70% 감소한다. Baseline B는 약 100MB, Tab당 T는 50~200MB이다.
Key Takeaway
Chrome을 리소스 집약적 브라우저가 아닌 일회성 엔진으로 취급하고, 메모리 소비를 줄이는 것이 아니라 렌더링 대상 자체를 최소화해야 한다.
실천 포인트
Docker 컨테이너에서 Puppeteer 기반 스크래핑/자동화工作时, --disable-dev-shm-usage 플래그와 request.abort() 조합으로 렌더러 메모리를 60~70% 절감할 수 있다.