このページでは、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 には Memory Profiler が組み込まれており、ルールのメモリ使用量を確認できます。このプロセスの詳細については、カスタムルールのパフォーマンスを向上させる方法に関するドキュメントのメモリ プロファイリングのセクションをご覧ください。