このページでは、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 が使用するメモリを減らすことができます。
これらのフラグを使用すると、Bazel がビルドで使用するメモリを最小限に抑えることができますが、今後のビルドは標準の増分ビルドよりも遅くなります。
次のいずれかのフラグを個別に渡すこともできます。
--discard_analysis_cacheは、実行中(分析中ではない)に使用されるメモリを削減します。増分ビルドでは、パッケージの読み込みをやり直す必要はありませんが、分析と実行をやり直す必要があります(ただし、ディスク上のアクション キャッシュを使用すると、ほとんどの再実行を防ぐことができます)。--notrack_incremental_stateは、Bazel の内部依存関係グラフにエッジを保存しないため、増分ビルドには使用できません。次のビルドではそのデータが破棄されますが、--nokeep_state_after_buildが指定されていない限り、内部デバッグのためにそれまで保持されます。--nokeep_state_after_buildは、ビルド後にすべてのデータを破棄するため、増分ビルドは(ディスク上のアクション キャッシュを除き)最初からビルドする必要があります。単独では、現在のビルドのウォーターマークには影響しません。
メモリ プロファイリング
Bazel には、ルールのメモリ使用量を確認できる組み込みのメモリ プロファイラが用意されています。このプロセスの詳細については、カスタムルールのパフォーマンスを改善する方法に関する ドキュメントのメモリ プロファイリングのセクションをご覧ください。