메모리 최적화

문제 신고 소스 보기

이 페이지에서는 Bazel이 사용하는 메모리를 제한하고 줄이는 방법을 설명합니다.

제한된 RAM으로 Bazel 실행

특정 상황에서 Bazel이 최소한의 메모리를 사용하도록 할 수 있습니다. --host_jvm_args=-Xmx2g와 같이 시작 플래그 --host_jvm_args를 통해 최대 힙을 설정할 수 있습니다.

그러나 빌드가 충분히 크면 Bazel이 메모리가 충분하지 않을 때 OutOfMemoryError(OOM)이 발생할 수도 있습니다. --discard_analysis_cache, --nokeep_state_after_build, --notrack_incremental_state 명령어 플래그를 전달하면 Bazel이 메모리를 적게 사용하면서 증분 빌드가 느려질 수 있습니다.

이러한 플래그는 Bazel이 빌드에서 사용하는 메모리를 최소화하지만, 향후 증분 빌드는 표준 증분 빌드보다 느려집니다.

다음 플래그 중 하나를 개별적으로 전달할 수도 있습니다.

  • --discard_analysis_cache는 분석이 아닌 실행 중에 사용되는 메모리를 줄입니다. 증분 빌드를 사용하면 패키지 로드를 다시 실행하지 않아도 되지만 분석과 실행을 다시 실행해야 합니다 (디스크 작업 시 대부분의 캐시 재실행이 차단될 수 있음).
  • --notrack_incremental_state는 Bazel의 내부 종속 항목 그래프에 에지를 저장하지 않으므로 증분 빌드에 사용할 수 없습니다. 다음 빌드는 이 데이터를 삭제하지만 --nokeep_state_after_build가 지정되지 않는 한 내부 디버깅을 위해 그때까지 보존됩니다.
  • --nokeep_state_after_build는 빌드 후 모든 데이터를 삭제하므로 증분 빌드를 처음부터 빌드해야 합니다 (디스크 내 작업 캐시 제외). 단, 현재 빌드의 상위 워터마크에는 영향을 미치지 않습니다.

메모리 프로파일링

Bazel은 규칙의 메모리 사용을 확인하는 데 도움이 되는 메모리 프로파일러를 기본 제공합니다. 커스텀 규칙의 성능을 개선하는 방법에 대한 이 문서의 메모리 프로파일링 섹션에서 이 프로세스에 대해 자세히 알아보세요.