メモリを最適化する

問題を報告 ソースを表示 毎晩

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