このページでは、Bazel が使用するメモリを制限して削減する方法について説明します。
制限付き RAM で Bazel を実行する
状況によっては、Bazel で最小限のメモリを使用する場合があります。最大ヒープは、--host_jvm_args=-Xmx2g
などの起動フラグ --host_jvm_args
で設定できます。
ただし、ビルドが十分に大きい場合、メモリが不足すると Bazel が OutOfMemoryError
(OOM)をスローすることがあります。次のコマンドフラグ(--discard_analysis_cache
、--nokeep_state_after_build
、--notrack_incremental_state
)を渡すことで、Bazel のメモリ使用量を削減できます。ただし、増分ビルドの速度は低下します。
これらのフラグを使用すると、Bazel がビルドで使用するメモリを最小限に抑えることができますが、その代償として、今後のビルドが標準の増分ビルドよりも遅くなります。
次のいずれかのフラグを個別に渡すこともできます。
--discard_analysis_cache
を使用すると、実行(分析ではない)中に使用されるメモリが削減されます。増分ビルドではパッケージの読み込みをやり直す必要はありませんが、分析と実行をやり直す必要があります(ただし、ディスク上のアクション キャッシュにより、ほとんどの再実行を回避できます)。--notrack_incremental_state
は Bazel の内部依存関係グラフにエッジを保存しないため、増分ビルドには使用できません。次のビルドでそのデータは破棄されますが、--nokeep_state_after_build
が指定されていない限り、内部デバッグのためにそれまで保持されます。--nokeep_state_after_build
はビルド後にすべてのデータを破棄するため、増分ビルドは(オンディスク アクション キャッシュを除き)最初からビルドする必要があります。単独では、現在のビルドのハイウォーターマークには影響しません。
メモリ プロファイリング
Bazel には、ルールのメモリ使用量を確認できるメモリ プロファイラが組み込まれています。このプロセスについて詳しくは、カスタムルールのパフォーマンスを改善する方法に関するドキュメントのメモリ プロファイリングのセクションをご覧ください。