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

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