Tối ưu hoá bộ nhớ

Trang này mô tả cách giới hạn và giảm bộ nhớ mà Bazel sử dụng.

Chạy Bazel với RAM hạn chế

Trong một số trường hợp, bạn có thể muốn Bazel sử dụng bộ nhớ tối thiểu. Bạn có thể đặt vùng nhớ khối xếp tối đa thông qua cờ khởi động --host_jvm_args, chẳng hạn như --host_jvm_args=-Xmx2g.

Tuy nhiên, nếu các bản dựng của bạn đủ lớn, Bazel có thể gửi một OutOfMemoryError (OOM) khi không có đủ bộ nhớ. Bạn có thể làm cho Bazel sử dụng ít bộ nhớ hơn, nhưng các bản dựng tăng dần sẽ chậm hơn, bằng cách truyền các cờ lệnh sau: --discard_analysis_cache, --nokeep_state_after_build--notrack_incremental_state.

Những cờ này sẽ giảm thiểu bộ nhớ mà Bazel sử dụng trong một bản dựng, nhưng sẽ khiến các bản dựng trong tương lai chậm hơn so với bản dựng gia tăng tiêu chuẩn.

Bạn cũng có thể truyền từng cờ trong số này:

  • --discard_analysis_cache sẽ giảm bộ nhớ được sử dụng trong quá trình thực thi (không phải phân tích). Các bản dựng gia tăng sẽ không phải tải lại gói, nhưng sẽ phải phân tích và thực thi lại (mặc dù bộ nhớ đệm hành động trên ổ đĩa có thể ngăn chặn hầu hết các lần thực thi lại).
  • --notrack_incremental_state sẽ không lưu trữ bất kỳ cạnh nào trong biểu đồ phần phụ thuộc nội bộ của Bazel, do đó, bạn không thể sử dụng biểu đồ này cho các bản dựng gia tăng. Bản dựng tiếp theo sẽ loại bỏ dữ liệu đó, nhưng dữ liệu sẽ được giữ nguyên cho đến thời điểm đó để gỡ lỗi nội bộ, trừ phi --nokeep_state_after_build được chỉ định.
  • --nokeep_state_after_build sẽ loại bỏ tất cả dữ liệu sau khi tạo bản dựng để các bản dựng gia tăng phải tạo từ đầu (ngoại trừ bộ nhớ đệm thao tác trên ổ đĩa). Chỉ riêng việc này không ảnh hưởng đến điểm cao nhất của bản dựng hiện tại.

Phân tích bộ nhớ

Bazel đi kèm với một trình phân tích bộ nhớ tích hợp có thể giúp bạn kiểm tra mức sử dụng bộ nhớ của quy tắc. Hãy đọc thêm về quy trình này trong phần Phân tích bộ nhớ trong tài liệu của chúng tôi về cách cải thiện hiệu suất của các quy tắc tuỳ chỉnh.