优化内存

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

使用有限 RAM 运行 Bazel

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

但是,如果您的 build 足够大,Bazel 在内存不足时可能会抛出 OutOfMemoryError (OOM)。您可以通过传递以下命令标志来让 Bazel 使用更少的内存,但增量 build 的速度会变慢:--discard_analysis_cache--nokeep_state_after_build--notrack_incremental_state

这些标志会最大限度地减少 Bazel 在 build 中使用的内存,但未来的 build 速度会比标准增量 build 慢。

您还可以单独传递这些标志中的任何一个:

  • --discard_analysis_cache 会减少执行期间(而非 分析期间)使用的内存。增量 build 无需重新执行软件包加载,但必须 重新执行分析和执行(不过,磁盘上的操作缓存可以 防止大多数重新执行)。
  • --notrack_incremental_state 不会在 Bazel 的内部 依赖关系图中存储任何边,因此无法用于增量 build。下一个 build 会舍弃该数据,但除非指定了 --nokeep_state_after_build,否则该数据会保留到那时以进行内部调试 。
  • --nokeep_state_after_build 会在 build 后舍弃所有数据,因此 增量 build 必须从头开始构建(磁盘上的操作 缓存除外)。单独使用时,它不会影响当前 build 的最高水位线。

内存分析

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