Sobes.tech
Middle+

Եթե մենք հասնենք Linux օպերացիոն համակարգում ռամի սահմանին, երբ ձայնը անջատված է, ինչ կլինի?

sobes.tech AI

Պատասխան AI-ից

Linux օպերացիոն համակարգը, երբ հասնում է հիշողության սահմանին (OOM - Out Of Memory), գործարկում է OOM Killer- ը: Դա միջուկի գործընթաց է, որը ընտրում և ավարտում է մեկ կամ մի քանի գործընթացներ, որոնք զբաղեցնում են զգալի հիշողության քանակ, որպեսզի ազատի ռեսուրսները և կանխի համակարգի կախվելը: Ընտրությունը հիմնված է հուրհեստականության վրա, որը հաշվի է առնում հիշողության սպառումը, գործընթացի առաջնահերթությունը (oom_score), նրա գոյության ժամանակը և այլ գործոններ: Ձայնի անջատումը այս մեխանիզմին չի ազդում:

Հետևանքները սահմանափակման և OOM Killer-ի աշխատանքի կարող են տարբեր լինել:

  • Կրիտիկ կարևոր գործընթացի ավարտում: Եթե OOM Killer-ը ընտրի համակարգի աշխատանքի համար կրիտիկ կարևոր գործընթաց (օրինակ, շել կամ գրաֆիկական միջավայրի կառավարիչ), դա կարող է հանգեցնել համակարգի անկայունության կամ կախվելու, վերաբեռնում:
  • Օգտագործողի գործընթացի ավարտում: Եթե ավարտվի օգտվողի գործընթացը (օրինակ, վեբ բրաուզեր, տեքստային խմբագիր), օգտվողը կկորցնի չխնայված տվյալները:
  • Ժամանակավոր ռեսուրսների ազատում: Հաջող ավարտից հետո համակարգը ժամանակավոր կթեթևանա հիշողությամբ, ինչը թույլ կտա շարունակել նորմալ աշխատանքը մինչև նորից հիշողության պակասը:
  • Ստուգում համակարգային լոգերում: OOM Killer-ի գործարկման և ավարտված գործընթացների մասին տեղեկատվությունը կգրանցվի համակարգային լոգերում (օրինակ, dmesg կամ journalctl), ինչը թույլ է տալիս ադմինիստրատորին վերլուծել հիշողության պակասի պատճառը:

Լոգերը ստուգելու համար, օրինակ, կարող եք օգտագործել հետևյալը:

# Վերջին հաղորդագրությունների դիտում, ներառյալ OOM Killer-ի տեղեկությունները
dmesg | grep -i 'out of memory'

# Journal- ի գրառումների դիտում, կապված OOM-ի հետ
journalctl -xe | grep -i 'out of memory'

OOM Killer-ի վարքագծի կարգավորումները կարելի է փոխել /proc/sys/vm/oom_kill_allocating_task և /proc/<pid>/oom_score_adj ֆայլերի միջոցով:

# OOM Killer- ը անջատել (չհրահանգվում է մեծ մասի դեպքերում)
echo 0 > /proc/sys/vm/oom_kill_allocating_task

# Կարգավորել oom_score_adj գործառույթի համար PID 1234
# Բարձր արժեքը մեծացնում է գործընթացի ավարտման հավանականությունը
echo 1000 > /proc/1234/oom_score_adj

# Նվազ արժեքը նվազեցնում է գործընթացի ավարտման հավանականությունը
echo -1000 > /proc/1234/oom_score_adj