Out of Memory Killer (OOM Killer) dan Cara Mengaturnya Batasnya

By | August 5, 2024
290 Views

Out of Memory Killer (OOM Killer) adalah komponen dari kernel Linux yang dirancang untuk mencegah kehabisan memori sistem secara menyeluruh, yang dapat menyebabkan ketidakstabilan atau ketidakresponsifan sistem. Ketika sistem Linux kehabisan memori fisik atau swap yang tersedia karena penggunaan memori yang berlebihan oleh proses-proses, OOM Killer akan campur tangan untuk membebaskan memori dan menjaga stabilitas sistem.

Menemukan Alasan Mengapa Sebuah Proses di Kill

Ada beberapa petunjuk yang bisa Anda ikuti. Proses MySQL dalam contoh di bawah ini dibunuh oleh OOM Killer karena kondisi kehabisan memori. Huruf K besar pada Killed memberi tahu kita bahwa proses tersebut dibunuh dengan sinyal -9. Ini sering kali merupakan petunjuk bahwa OOM Killer telah menangani situasi tersebut.

grep -i kill /var/log/messages*
host kernel: Out of Memory: Killed process 2626 (mysqld).

Cara Disable OOM Killer

Tidak benar-benar memungkinkan untuk sepenuhnya menonaktifkan OOM killer Linux. Yang terbaik yang bisa Anda lakukan adalah menetapkan batas setelah alokasi memori harus gagal. Anda dapat mengatur vm.overcommit_memory ke 2. Untuk informasi lebih lanjut, lihat dokumen tentang overcommit accounting.

 

Pengaturan untuk mencegah OOM Killing untuk Proses yang Spesifik

Anda dapat menggunakan rentang oom_adj untuk ini. Nilai yang mungkin untuk oom_adj berkisar dari -17 hingga +15. Semakin tinggi skor untuk sebuah proses, semakin besar kemungkinan proses terkait akan di Kill oleh OOM Killer. Jika oom_adj diatur ke -17, proses tersebut tidak akan dipertimbangkan untuk dihentikan oleh OOM Killer.

echo -17 > /proc/2626/oom_adj

Contoh berikut saya mempunyai service test yang tiba2 di kill oleh OOM Killer karena boros sekali penggunaan RAM mengingat saya gunakan VPS untuk menghitung deep learning (memaksakan diri)

!systemctl status -l test
× test.service - R Mask CNN 
     Loaded: loaded (]8;;file://upbeat-turing.202-1xx41-2xxp esk.page/etc/systemd/system/test.service/etc/systemd/system/test.service]8;;; enabled; vendor preset: enabled)
     Active: failed (Result: oom-kill) since Sat 2024-08-03 18:53:26 WIB; 10h ago
    Process: 7283 ExecStart=/root/anaconda3/bin/python /home/bejo/Mask R CNN Beras/Model Stardist/train.py (code=killed, signal=KILL)
   Main PID: 7283 (code=killed, signal=KILL)
        CPU: 24min 40.753s

Aug 03 18:29:34 upbeat-turing.202-10-41-225.plesk.page python[7283]: cpu
Aug 03 18:29:34 upbeat-turing.202-10-41-225.plesk.page python[7283]: /home/bejo/Mask R CNN Beras/Model Stardist/butiran beras banyak/raw/C1.jpg
Aug 03 18:29:34 upbeat-turing.202-10-41-225.plesk.page python[7283]: 3
Aug 03 18:29:34 upbeat-turing.202-10-41-225.plesk.page python[7283]: menggunakan sesi pelatihan
Aug 03 18:29:34 upbeat-turing.202-10-41-225.plesk.page python[7283]: epoch_current  25 0.5794053077697754
Aug 03 18:53:22 upbeat-turing.202-10-41-225.plesk.page systemd[1]: test.service: A process of this unit has been killed by the OOM killer.
Aug 03 18:53:26 upbeat-turing.202-10-41-225.plesk.page python[7283]: [755B blob data]
Aug 03 18:53:26 upbeat-turing.202-10-41-225.plesk.page systemd[1]: test.service: Main process exited, code=killed, status=9/KILL
Aug 03 18:53:26 upbeat-turing.202-10-41-225.plesk.page systemd[1]: test.service: Failed with result 'oom-kill'.
Aug 03 18:53:26 upbeat-turing.202-10-41-225.plesk.page systemd[1]: test.service: Consumed 24min 40.753s CPU time

Maka dari itu kita edit dan tambahkan pengaturan sebagai berikut

[Service]
OOMScoreAdjust=-150

menjadi

[Unit]
Description=My test service
After=multi-user.target
[Service]
Type=simple
Restart=always
OOMScoreAdjust=-150
ExecStart= /root/anaconda3/bin/python "/home/bejo/Model Stardist/train.py"
[Install]
WantedBy=multi-user.target

tapi harus hati2, pastikan SWAP memory cukup

top - 07:05:53 up 1 day,  2:09,  1 user,  load average: 4.06, 3.77, 2.61
Tasks: 121 total,   3 running, 118 sleeping,   0 stopped,   0 zombie
%Cpu(s):  1.0 us, 13.5 sy,  0.0 ni, 14.9 id, 60.5 wa,  0.0 hi,  1.2 si,  9.0 st
MiB Mem :   7949.5 total,    153.6 free,   7726.8 used,     69.1 buff/cache
MiB Swap:   8448.0 total,   3858.1 free,   4589.9 used.     49.8 avail Mem

perhatikan SWAP nya saya naikan menjadi 32GB

top - 08:38:45 up 1 day,  3:42,  1 user,  load average: 1.00, 0.88, 1.26
Tasks: 119 total,   2 running, 117 sleeping,   0 stopped,   0 zombie
%Cpu(s): 13.0 us,  0.1 sy,  0.0 ni, 74.5 id,  0.0 wa,  0.0 hi,  0.0 si, 12.5 st
MiB Mem :   7949.5 total,   2839.8 free,   4337.6 used,    772.1 buff/cache
MiB Swap:  32768.0 total,  32768.0 free,      0.0 used.   3360.9 avail Mem

 

See also  This Simple Desktop Clock Looks Great on Ubuntu