Como executar o Bazel com RAM limitada

Nesta página, descrevemos como usar flags para executar o Bazel com RAM limitada.

Em algumas situações, talvez você queira que o Bazel use o mínimo de memória. É possível definir o heap máximo usando a flag de inicialização --host_jvm_args, como --host_jvm_args=-Xmx2g.

No entanto, se as builds forem grandes o suficiente, o Bazel poderá gerar um OutOfMemoryError (OOM) quando não tiver memória suficiente. Você pode fazer com que o Bazel use menos memória, ao custo de builds incrementais mais lentas, transmitindo as seguintes flags de comando: --discard_analysis_cache, --nokeep_state_after_build, e --notrack_incremental_state.

Essas flags vão minimizar a memória que o Bazel usa em uma build, ao custo de tornar as builds futuras mais lentas do que uma build incremental padrão.

Você também pode transmitir qualquer uma dessas flags individualmente:

  • --discard_analysis_cache reduz a memória usada durante a execução (não a análise). As builds incrementais não precisam refazer o carregamento de pacotes, mas precisam refazer a análise e a execução (embora o cache de ações no disco possa impedir a maioria das reexecuções).
  • --notrack_incremental_state não armazena nenhuma aresta no gráfico de dependência interno do Bazel, de modo que ele não possa ser usado para builds incrementais. A próxima build vai descartar esses dados, mas eles serão preservados até então para depuração interna, a menos que --nokeep_state_after_build seja especificado.
  • --nokeep_state_after_build descartará todos os dados após a build, para que as builds incrementais precisem ser criadas do zero (exceto para o cache de ações no disco). Sozinho, ele não afeta a marca d'água da build atual.