將記憶體最佳化

回報問題 查看原始碼

本頁面說明如何限制及減少 Bazel 使用的記憶體。

使用有限 RAM 執行 Bazel

在某些情況下,您可能希望 Bazel 使用最少的記憶體。您可以透過啟動標記 --host_jvm_args 設定堆積上限,例如 --host_jvm_args=-Xmx2g

但是,如果您的版本夠大,Bazel 會在記憶體不足時擲回 OutOfMemoryError (OOM)。您可以傳遞下列指令標記,讓 Bazel 使用較少的記憶體,同時減少漸進式建構作業的費用:--discard_analysis_cache--nokeep_state_after_build--notrack_incremental_state

這些標記將最小化 Bazel 在建構中使用的記憶體,但未來建構速度會比標準漸進式建構慢。

您也可以個別傳送下列任一標記:

  • --discard_analysis_cache 會減少執行期間使用的記憶體 (非分析)。漸進式建構不必重做套件載入,但必須重做分析和執行 (雖然磁碟動作動作快取可以防止大部分的重新執行)。
  • --notrack_incremental_state 不會在 Bazel 的內部依附元件圖表中儲存任何邊緣,所以無法用於漸進式建構作業。除非指定 --nokeep_state_after_build,否則下次建構會捨棄該資料,但會保留內部偵錯。
  • --nokeep_state_after_build 會在建構後捨棄所有資料,因此漸進式建構作業必須從頭開始建構 (磁碟操作動作快取除外)。光是影響現有版本的高水設計,則不會影響。

記憶體剖析

Bazel 內建記憶體分析器,可協助您檢查規則的記憶體用量。如要進一步瞭解此程序,請參閱說明文件中的記憶體剖析部分,瞭解如何改善自訂規則的效能。