Եթե մենք հասնենք 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