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