メモリを最適化する

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