优化内存

报告问题 查看来源 每晚 · 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 在构建中使用的内存,但代价是 使未来的 build 比标准增量 build 慢。

您也可以单独传递以下任一标志:

  • --discard_analysis_cache 会减少执行期间使用的内存(不是 分析)。增量构建无需重做软件包加载,但会 必须重新进行分析和执行(尽管磁盘上的操作缓存可以 防止大多数重新执行)。
  • --notrack_incremental_state 不会在 Bazel 的内部 依赖关系图,因此它不能用于增量构建。下一个 build 会舍弃这些数据,但在此之前仍会保留这些数据,以便进行内部调试 除非指定了 --nokeep_state_after_build
  • --nokeep_state_after_build 将在构建后舍弃所有数据, 必须从头开始构建的增量构建 缓存)。仅这一项不会影响当前 build 的高水位标记。

内存分析

Bazel 附带一个内置的内存分析器,可以帮助您检查规则的 内存用量。如需详细了解此流程,请访问 “内存分析”部分 有关如何提高自定义规则效果的文档。