优化内存

报告问题 查看源代码

本页介绍了如何限制和减少 Bazel 使用的内存。

在 RAM 有限的情况下运行 Bazel

在某些情况下,您可能希望 Bazel 使用最少的内存。您可以通过启动标志 --host_jvm_args(如 --host_jvm_args=-Xmx2g)设置最大堆。

不过,如果您的构建足够大,则当 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 将在构建后舍弃所有数据,因此必须从头开始构建增量构建(磁盘操作缓存除外)。单独如此,这并不会影响当前 build 的高水印。

内存性能分析

Bazel 附带内置的内存分析器,可帮助您检查规则的内存用量。如需详细了解此过程,请参阅文档的内存性能分析部分,了解如何提高自定义规则的性能。