피드로 돌아가기
Headless Chrome: Mastering Server-Side Resource Orchestration and Memory Optimization
Dev.toDev.to
Backend

서버 환경에서 Chrome의 과도한 메모리 소비를 플래그 최적화와 리소스 필터링으로 해결하는 기법

Headless Chrome: Mastering Server-Side Resource Orchestration and Memory Optimization

OnlineProxy2026년 3월 31일6advanced

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% 절감할 수 있다.

원문 읽기