优化内存

报告问题 查看源代码 每夜 build · 7.4 . 7.3 · 7.2 · 7.1 · 7.0 · 6.5

本页介绍了如何限制和减少 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 在构建过程中使用的内存,但代价是未来的构建速度会比标准增量构建慢。

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

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

内存性能分析

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