메모리 최적화

문제 신고 소스 보기 1박 · 7.2 · 7.1 · 7.0 · 6.5 · 6.4

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

제한된 RAM으로 Bazel 실행

특정 상황에서는 Bazel이 최소한의 메모리를 사용하도록 하는 것이 좋습니다. 이 시작 플래그를 통한 최대 힙 --host_jvm_args님, (예: --host_jvm_args=-Xmx2g)

그러나 빌드가 충분히 크면 Bazel에서 OutOfMemoryError을 발생시킬 수 있습니다. 메모리 부족(OOM) 문제를 일으킬 수 있습니다. Bazel이 더 적은 메모리를 사용하도록 다음 명령어 플래그를 전달하여 느린 증분 빌드의 비용을 줄일 수 있습니다. --discard_analysis_cache님, --nokeep_state_after_build, 및 --notrack_incremental_state:

이러한 플래그는 Bazel이 빌드에서 사용하는 메모리를 최소화하므로 향후 빌드가 표준 증분 빌드보다 느려질 수 있습니다.

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

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

메모리 프로파일링

Bazel은 기본으로 제공되는 메모리 프로파일러를 사용해 규칙의 메모리 사용량을 줄일 수 있습니다. 이 프로세스에 대해 자세히 알아보려면 메모리 프로파일링 섹션을 맞춤 규칙의 성능을 개선하는 방법에 대한 설명서가 제공됩니다.