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

รายงานปัญหา ดูแหล่งที่มา รุ่น Nightly · 7.4 7.3 · 7.2 · 7.1 · 7.0 · 6.5

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

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

ในบางสถานการณ์ คุณอาจต้องการให้ Bazel ใช้หน่วยความจําน้อยที่สุด คุณสามารถตั้งค่ากองขยะสูงสุดผ่าน Flag เริ่มต้น --host_jvm_args เช่น --host_jvm_args=-Xmx2g

อย่างไรก็ตาม หากบิลด์มีขนาดใหญ่มากพอ Bazel อาจแสดงข้อผิดพลาด OutOfMemoryError (OOM) เมื่อหน่วยความจำไม่เพียงพอ คุณสามารถทําให้ Bazel ใช้หน่วยความจําน้อยลงได้ แต่การบิลด์ที่เพิ่มเข้ามาจะช้าลง โดยส่ง Flag คำสั่งต่อไปนี้ --discard_analysis_cache, --nokeep_state_after_build และ --notrack_incremental_state

Flag เหล่านี้จะลดหน่วยความจำที่ Bazel ใช้ในการสร้าง แต่จะทำให้การสร้างในอนาคตช้ากว่าการสร้างแบบเพิ่มมาตรฐาน

นอกจากนี้ คุณยังส่ง Flag รายการใดรายการหนึ่งต่อไปนี้แยกกันได้

  • --discard_analysis_cache จะลดหน่วยความจําที่ใช้ระหว่างการดําเนินการ (ไม่ใช่การวิเคราะห์) บิลด์ที่เพิ่มขึ้นจะไม่ต้องทำการคโหลดแพ็กเกจซ้ำ แต่จะต้องทําการวิเคราะห์และการดำเนินการซ้ำ (แม้ว่าแคชการดำเนินการบนดิสก์จะป้องกันการดำเนินการซ้ำได้ส่วนใหญ่)
  • --notrack_incremental_state จะไม่จัดเก็บขอบในกราฟทรัพยากร Dependency ภายในของ Bazel ทำให้ใช้งานกับบิลด์ที่เพิ่มขึ้นไม่ได้ บิลด์ถัดไปจะทิ้งข้อมูลดังกล่าว แต่ระบบจะเก็บข้อมูลไว้ใช้สำหรับการแก้ไขข้อบกพร่องภายในจนกว่าจะถึงเวลานั้น เว้นแต่จะมีการระบุ --nokeep_state_after_build
  • --nokeep_state_after_build จะทิ้งข้อมูลทั้งหมดหลังบิลด์ เพื่อให้บิลด์ที่เพิ่มขึ้นต้องสร้างใหม่ทั้งหมด (ยกเว้นแคชการดำเนินการบนดิสก์) การดำเนินการนี้เพียงอย่างเดียวจะไม่ส่งผลต่อจุดสูงสุดของบิลด์ปัจจุบัน

การสร้างโปรไฟล์หน่วยความจํา

Bazel มาพร้อมกับเครื่องมือวิเคราะห์หน่วยความจำในตัวซึ่งช่วยตรวจสอบการใช้หน่วยความจำของกฎได้ อ่านเพิ่มเติมเกี่ยวกับกระบวนการนี้ในส่วนการทำโปรไฟล์หน่วยความจำในเอกสารประกอบเกี่ยวกับวิธีปรับปรุงประสิทธิภาพของกฎที่กำหนดเอง