最佳化記憶體

回報問題 查看來源

本頁說明如何限制及減少 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 內建記憶體分析器,可協助您檢查規則的記憶體用量。如要進一步瞭解這項程序,請參閱說明文件的記憶體剖析一節,瞭解如何改善自訂規則的效能。