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

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

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