Sobes.tech
Middle+

თუ ჩვენ მივაღწევთ Linux ოპერაციული სისტემის RAM-ის ზღვარს, როდესაც ხმა გამორთულია, რა მოხდება?

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'

# journald-ის ჩანაწერების ნახვა, დაკავშირებული 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

# პროცესისთვის PID 1234-ის oom_score_adj კოეფიციენტის დაყენება
# მაღალი მნიშვნელობა ზრდის პროცესის დასრულების ალბათობას
echo 1000 > /proc/1234/oom_score_adj

# დაბალი მნიშვნელობა ამცირებს პროცესის დასრულების ალბათობას
echo -1000 > /proc/1234/oom_score_adj