ดูใน Google และไม่พบสิ่งใดที่อธิบายถึงวิธีการproc/<pid>/oom_score
คำนวณคะแนน เหตุใดจึงใช้คะแนนนี้แทนที่จะใช้หน่วยความจำทั้งหมดที่ใช้ไป
ดูใน Google และไม่พบสิ่งใดที่อธิบายถึงวิธีการproc/<pid>/oom_score
คำนวณคะแนน เหตุใดจึงใช้คะแนนนี้แทนที่จะใช้หน่วยความจำทั้งหมดที่ใช้ไป
คำตอบ:
ดูบทความ 2009 Goldwyn Rodrigues สำหรับการดำเนินการในขณะนั้นบทความ Jonathan's Corbet 2010สำหรับสิ่งที่ฉันเชื่อว่าเป็นพฤติกรรมปัจจุบันและบทความ 2013ของ Jonathan Corbet สำหรับแนวคิดเกี่ยวกับการเปลี่ยนแปลงในอนาคต
จากบทความ 2010:
ในชุดแก้ไขของเดวิดความผิดพลาดเก่า ๆ () การวิเคราะห์พฤติกรรมเกือบหมดไปหมดแล้ว การคำนวณจะกลายเป็นคำถามง่าย ๆ ว่ากระบวนการใช้หน่วยความจำที่มีอยู่เปอร์เซ็นต์ใด หากระบบโดยรวมมีหน่วยความจำไม่เพียงพอ "หน่วยความจำที่มีอยู่" คือผลรวมของ RAM ทั้งหมดและพื้นที่สว็อปที่มีอยู่ในระบบ หากสถานการณ์ OOM นั้นเกิดจากการทำให้หน่วยความจำที่อนุญาตให้กับกลุ่ม cpuset / กลุ่มควบคุมหมดลงดังนั้น "หน่วยความจำที่มีอยู่" คือจำนวนเงินทั้งหมดที่จัดสรรให้กับกลุ่มควบคุมนั้น การคำนวณที่คล้ายกันจะเกิดขึ้นหากเกินขีด จำกัด ที่กำหนดโดยนโยบายหน่วยความจำ ในแต่ละกรณีการใช้หน่วยความจำของกระบวนการถือว่าเป็นผลรวมของชุดที่อยู่อาศัย (จำนวนหน้า RAM ที่ใช้) และการใช้งาน swap
การคำนวณนี้สร้างผลลัพธ์เป็นจำนวนเปอร์เซ็นต์คูณสิบ กระบวนการที่ใช้หน่วยความจำที่มีอยู่ทุกไบต์จะมีคะแนน 1,000 ในขณะที่กระบวนการที่ไม่มีหน่วยความจำจะได้คะแนนเท่ากับศูนย์ มีฮิวริสติกน้อยมากในการปรับแต่งคะแนนนี้ แต่โค้ดยังลบจำนวนเล็กน้อย (30) จากคะแนนของกระบวนการที่เป็นเจ้าของรูทบนความคิดที่ว่าพวกเขามีค่ามากกว่ากระบวนการที่ผู้ใช้เป็นเจ้าของเล็กน้อย
การปรับแต่งอื่น ๆ ที่ใช้คือการเพิ่มค่าที่เก็บไว้ในตัวแปร oom_score_adj ของแต่ละกระบวนการซึ่งสามารถปรับได้ผ่าน / proc ปุ่มนี้ช่วยให้สามารถปรับความน่าดึงดูดใจของแต่ละโพรเซสต่อ OOM killer ในพื้นที่ผู้ใช้; การตั้งค่าเป็น -1000 จะเป็นการปิดการทำงานของ OOM โดยสิ้นเชิงในขณะที่การตั้งค่าเป็น +1000 จะเทียบเท่ากับการทาสีเป้าหมายขนาดใหญ่ในกระบวนการที่เกี่ยวข้อง