Otimizar memória

Nesta página, descrevemos como limitar e reduzir a memória usada pelo Bazel.

Executar o Bazel com RAM limitada

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

No entanto, se os builds forem grandes o suficiente, o Bazel poderá gerar um erro de OutOfMemoryError (OOM) quando não tiver memória suficiente. É possível fazer com que o Bazel use menos memória, mas com builds incrementais mais lentos, transmitindo as seguintes flags de comando: --discard_analysis_cache, --nokeep_state_after_build e --notrack_incremental_state.

Essas flags minimizam a memória usada pelo Bazel em um build, mas tornam os builds futuros mais lentos do que um build incremental padrão.

Também é possível transmitir uma destas flags individualmente:

  • --discard_analysis_cache vai reduzir a memória usada durante a execução (não a análise). Os builds incrementais não precisam refazer o carregamento de pacotes, mas precisam refazer a análise e a execução. No entanto, o cache de ações no disco pode evitar a maioria das reexecuções.
  • O --notrack_incremental_state não armazena nenhuma aresta no gráfico de dependência interno do Bazel, o que o torna inutilizável para builds incrementais. O build seguinte vai descartar esses dados, mas eles serão preservados até lá para depuração interna, a menos que --nokeep_state_after_build seja especificado.
  • O --nokeep_state_after_build vai descartar todos os dados após o build, para que os builds incrementais precisem ser criados do zero (exceto o cache de ações no disco). Sozinho, ele não afeta a marca d'água do build atual.

Criação de perfil de memória

O Bazel vem com um criador de perfil de memória integrado que pode ajudar você a verificar o uso de memória da sua regra. Leia mais sobre esse processo na seção de criação de perfil de memória da nossa documentação sobre como melhorar o desempenho das regras personalizadas.