メモリを最適化する

問題を報告する ソースを表示

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