
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