制限付き RAM で 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 で使用されるメモリを減らすことができます。

これらのフラグを使用すると、ビルドで使用されるメモリが最小限に抑えられますが、今後のビルドが標準の増分ビルドよりも遅くなります。

これらのフラグは個別に渡すこともできます。

  • --discard_analysis_cache は、実行中(分析中ではない)に使用されるメモリを削減します。増分ビルドでは、パッケージの読み込みをやり直す必要はありませんが、分析と実行をやり直す必要があります(ただし、ディスク上のアクション キャッシュにより、ほとんどの再実行を防ぐことができます)。
  • --notrack_incremental_state は Bazel の内部依存関係グラフにエッジを保存しないため、増分ビルドには使用できません。次のビルドではそのデータは破棄されますが、--nokeep_state_after_build が指定されていない限り、内部デバッグのためにそれまで保持されます。
  • --nokeep_state_after_build はビルド後にすべてのデータを破棄するため、増分ビルドは(ディスク上のアクション キャッシュを除き)ゼロからビルドする必要があります。単独では、現在のビルドのハイウォーター マークに影響しません。