เพิ่มประสิทธิภาพหน่วยความจํา

รายงานปัญหา ดูแหล่งที่มา

หน้านี้อธิบายวิธีจํากัดและลดหน่วยความจําที่ Bazel ใช้

การเรียกใช้ Bazel ที่มี RAM ที่จํากัด

ในบางสถานการณ์ คุณอาจต้องการให้ 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 มาพร้อมโปรไฟล์หน่วยความจําในตัวที่ช่วยให้คุณตรวจสอบการใช้งานหน่วยความจําของกฎได้ อ่านเพิ่มเติมเกี่ยวกับกระบวนการนี้ในส่วนการดําเนินการหน่วยความจําของเอกสารประกอบเกี่ยวกับวิธีปรับปรุงประสิทธิภาพของกฎที่กําหนดเอง