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