本页面介绍了如何限制和减少 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 的高水准标志。
内存性能分析
Bazel 附带内置内存分析器,可以帮助您检查规则的内存使用情况。如需详细了解此过程,了解如何提高自定义规则的性能,请参阅内存性能分析部分。