ฉันจะใช้ oom_score_adj ได้อย่างไร


24

เมื่อวันที่ 11.04, /proc/[pid]มีoom_score_adjแต่อธิบายเก่าman proc oom_adjฉันใช้ Google สำเร็จแล้วสำหรับข้อมูลใด ๆ เกี่ยวกับวิธีการใช้

สิ่งที่ฉันต้องเตรียมคือกระบวนการที่เริ่มต้นด้วย 'pbs' หรือ 'gridengine' จะถูกฆ่าก่อนสิ่งอื่นใดจะถูกฆ่า ฉันจะทำสิ่งนั้นได้อย่างไร


หากต้องการให้การเปลี่ยนแปลงนี้เป็นการถาวรสำหรับบริการที่จัดการโดย Upstart: วิธีตั้งค่าการปรับปรุง OOM killer สำหรับ daemons อย่างถาวรได้อย่างไร .
gertvdijk

มันเป็นคำตอบแล้ว มันเชื่อมโยงกับมัน :)
gertvdijk

แต่ไม่ใช่ในเว็บไซต์นี้ :-)
bmargulies

คำตอบ:


13

ตามคำถาม & คำตอบของฉันบน Unix & Linux ตามคำถามที่คล้ายกัน

ในฐานะที่เป็นสจ๊วร์ชี้ให้เห็นเป็นอย่างดีในคำตอบของเขา , ค่าที่ถูกต้องเป็นจำนวนเต็มในช่วงของ -1000 เพื่อ oom_score_adj1000 ลดค่าที่ต่ำกว่าโอกาสที่มันจะถูกฆ่าตาย

ไม่สะดวกมากที่จะต้องเปลี่ยนค่านี้ซ้ำแล้วซ้ำอีกเมื่อคุณรีสตาร์ทแอปพลิเคชัน ข้อมูลจะหายไปหลังจากกระบวนการสิ้นสุดลง พุ่งพรวด (init daemon ใน Ubuntu) มีตัวเลือกที่ดีสำหรับสิ่งนี้เพื่อกำหนดค่าสำหรับ daemons เพื่อให้แน่ใจว่ามีการตั้งค่าทุกครั้งที่เริ่มต้น (ใหม่):

oom score

[... ] snip [... ]

ตัวอย่าง:

# this application is a "resource hog"
oom score 1000

expect daemon
respawn
exec /usr/bin/leaky-app

ดังนั้นโดยทั่วไปคุณสามารถแก้ไขแฟ้มการกำหนดค่าสำหรับการให้บริการที่คุณชอบการเปลี่ยนแปลงรวมถึงบรรทัด/etc/init/myservice.conf oom score -1000ฉันสมมติว่าบริการ 'pbs' หรือ 'gridengine' ที่คุณกำลังพูดถึงในคำถามของคุณคือเปิดใช้งานการพุ่งพรวดมิฉะนั้นคุณจะต้องมีวิธีอื่นในการเปลี่ยนแปลงอย่างถาวร


7

หากคุณสามารถแก้ไขสคริปต์เริ่มต้นที่วางไข่กระบวนการที่คุณต้องการจัดลำดับความสำคัญสำหรับ oom-killer ให้เพิ่มสิ่งต่อไปนี้ในสคริปต์เริ่มต้น:

echo 1000 > /proc/self/oom_score_adj

ค่าถูกสืบทอดสำหรับกระบวนการลูก


6

หากคุณตั้งค่าที่สูง (ish) สำหรับ oom_adj หรือ oom_score_adj จากนั้นจะถูกฆ่าก่อน เช่น

echo 15 > /proc/[pid]/oom_adj

oom_adj ไปจาก -16 ถึง 15 และตามที่กล่าวไว้ข้างต้น oom_score_adj ยอมรับ -1000 ถึง 1000


คุณต้องรูทเพื่อทำสิ่งนี้ sudo sh -c "echo -1000 > /proc/[PID]/oom_score_adj"
Adil

2
ที่จริงแล้วคุณสามารถเพิ่มคะแนนสำหรับกระบวนการของคุณโดยไม่ต้องรูท ("ใช่นี่สามารถฆ่าได้ด้วย") การลดลง (ต่ำกว่า 0) ต้องการราก
Piskvor

5

การดูรหัสเป็นความคิดที่ดีเสมอ ปกติฉันจะใช้ฟังก์ชั่นการค้นหาของ kernel.org แต่ขณะนี้มันลง Github ก็ทำผลงานได้ดีเช่นกัน ฉันพบสิ่งนี้:

แต่จะเพิ่มใหม่ที่ปรับได้ / proc / pid / oom_score_adj ซึ่งจะอยู่ในช่วงตั้งแต่ -1000 ถึง +1000 มันอาจจะถูกใช้เพื่อทำให้เกิดความเชื่อมั่นในการทำโพลาไรซ์ซึ่งงานบางอย่างจะไม่ถูกพิจารณาสำหรับการฆ่าอุ้มในขณะที่คนอื่นอาจได้รับการพิจารณา ค่าจะถูกเพิ่มโดยตรงไปยังคะแนน badness () ดังนั้นค่า -500 เช่นหมายถึงการลด 50% ของการใช้หน่วยความจำเมื่อเปรียบเทียบกับงานอื่น ๆ ในระบบผูกกับ mempolicy ใน cpuset หรือ การแชร์คอนโทรลเลอร์หน่วยความจำเดียวกัน

จากhttps://github.com/mirrors/linux-2.6/commit/a63d83f427fbce97a6cea0db2e64b0eb8435cd10#include/linux/oom.h


ขอบคุณสำหรับตัวชี้ แต่ฉันหวังว่าใครบางคนจะขับรถและยิงในสูตรสำหรับปัญหาทั้งหมดซึ่งดูเหมือนว่าจะมีการจัดเรียงสำหรับค่านี้จะถูกตั้งค่าสำหรับ exec daemon ของ pbs ก่อนที่จะหางานใด ๆ
bmargulies

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.