Sobes.tech
Middle

Kuidas Linux otsustab, millise protsessi lõpetada?

sobes.tech AI

Vastus AI-lt

Linux kasutab OOM (Out-Of-Memory) Killer algoritmi, et määrata, millised protsessid tuleks lõpetada, kui süsteemil puudub operatiivmälu (RAM). See algoritm analüüsib erinevaid mõõdikuid, et valida protsessid, millel on kõige vähem negatiivset mõju süsteemile nende lõpetamisel.

Peamised tegurid, mida OOM Killer arvestab:

  • oom_score: numbriline näitaja, mis peegeldab protsessi lõpetamise võimaliku mõju süsteemile. Mida kõrgem punktisumma, seda tõenäolisem on, et protsess valitakse lõpetamiseks. See punktisumma arvutatakse protsessi mälu kasutamise, prioriteedi (nice väärtuse) ja teiste tegurite põhjal.
  • Kasutatud mälu maht: protsessid, mis kasutavad palju mälu, omavad tavaliselt kõrgemat oom_score.
  • Protsessi prioriteet: madalama prioriteediga protsessid (kõrgem nice väärtus) on suurema tõenäosusega lõpetatavad.
  • Protsessi eluea pikkus: "nooremad" protsessid võivad omada kõrgemat oom_score.
  • Ema-protsess: OOM Killer püüab mitte lõpetada kriitiliselt olulisi süsteemiprotsesse või teisi olulisi protsesse, millele teised protsessid sõltuvad.

Kasutaja saab mõjutada OOM Killeri käitumist, muutes oom_score_adj väärtust konkreetsetele protsessidele. See kõrvalekalle lisatakse põhjus oom_score-le, võimaldades muuta protsessi lõpetamise tõenäosust vähemaks või rohkemaks.

# Vaadata praegust `oom_score` PID 1234 protsessile
cat /proc/1234/oom_score

# Vaadata praegust `oom_score_adj` PID 1234 protsessile
cat /proc/1234/oom_score_adj

# Seada minimaalne `oom_score_adj` (-1000) PID 1234 protsessile
# See praktiliselt garanteerib, et protsess ei lõpetata OOM Killeri poolt
echo -1000 > /proc/1234/oom_score_adj

Seega määrab Linux, millise protsessi lõpetada mälu puuduse tingimustes, tuginedes keerulisele OOM Killer algoritmile, mis kaalub erinevaid tegureid, et minimeerida negatiivset mõju süsteemi stabiilsusele.