OOM di linux

Jika sistem Linux kehabisan memori, atau disebut dengan kondisi OOM (out of memory), maka “OOM killer” kernel Linux akan bekerja, membunuh proses-proses secara “random” (tepatnya, proses-proses yang layak dibunuh menurut kriteria tertentu) agar sejumlah memori terbebaskan dan sistem dapat berlanjut kembali. Namun problemnya adalah, kadang-kadang proses yang penting bisa terbunuh. Contohnya: xlock (untuk lock X session), akibatnya session X kita jadi terbuka dengan sendirinya. Ini cukup fatal, karena jika kita meninggalkan workstation kita yang sedang kita kunci, jadi dapat terbuka. Contoh lain adalah sshd pada server remote, sehingga kita kehilangan akses remote utk server tersebut.

Untuk mengatasi masalah ini, ada beberapa cara/pendekatan.

Panic dan automatic reboot

Kita dapat memilih jika terjadi kondisi OOM, kernel panic dan automatic reboot saja. Untuk melakukan hal ini:

# echo 1 > /proc/sys/vm/panic_on_oom
# echo 5 > /proc/sys/kernel/panic

Artinya, dalam 5 (lima) detik setelah terjadi kernel panic, sistem otomatis direboot. Catatan: jika kernel atau mesin hang total, tentu saja tidak bisa automatic reboot. Automatic reboot dapat dilakukan jika kernel mengalami panic (fatal error) tapi kernel masih hidup.

Untuk membuat setting ini permanen, tambahkan baris:

vm.panic_on_oom=1
kernel.panic=5

ke /etc/sysctl.conf.

Catatan: setting automatic juga bisa ditambahkan ke kernel options, yaitu “panic=N”. Dengan cara ini kita dapat memilih kernel mana saja yang ingin diberi setting ini dan mana yang tidak usah. Untuk menggunakan kernel options utk autoreboot kernel panic, buang kembali baris “kernel.panic=5” dari /etc/sysctl.conf dan edit /boot/grub/menu.lst dan tambahkan “panic=5” di posisi seperti di bawah. Perhatikan bahwa menu.lst ini memiliki format spesifik yang akan diproses oleh skrip, jadi baris “kopt=…” setelah ditambahi “panic=5” tetap dikomen, nanti akan otomatis ditambahkan ke tiap entri kernel setelah kita menjalankan skrip update-grub.

### BEGIN AUTOMAGIC KERNELS LIST
## lines between the AUTOMAGIC KERNELS LIST markers will be modified
## by the debian update-grub script except for the default options below

## DO NOT UNCOMMENT THEM, Just edit them to your needs

## ## Start Default Options ##
## default kernel options
## default kernel options for automagic boot options
## If you want special options for specific kernels use kopt_x_y_z
## where x.y.z is kernel version. Minor versions can be omitted.
## e.g. kopt=root=/dev/hda1 ro
##      kopt_2_6_8=root=/dev/hdc1 ro
##      kopt_2_6_8_2_686=root=/dev/hdc2 ro
# kopt=root=/dev/hda1 ro panic=5

Lalu jalankan update-grub dan reboot kernel.

Setting overcommit kernel

Selain dengan cara pertama yaitu panic+autoreboot, kita juga dapat mengeset setting overcommit memori.

# echo 2 > /proc/sys/vm/overcommit_memory

Untuk membuat setting ini permanen, tambahkan baris ini di /etc/sysctl.conf:

vm.overcommit_memory=2

lalu reboot kernel.

Setting ini melarang alokasi memori yang berlebihan oleh proses-proses sehingga efeknya adalah proses-proses tidak di-kill dalam kondisi OOM tapi akan menerima pesan error out of memory. Untuk lebih jelasnya, bisa melihat dokumentasi kernel Linux di Documentation/vm/overcommit-accounting.

Saat ini sistem yang menggunakan Spanel 1.2 diset menggunakan setting ini.

oom_adj

Proses tertentu dapat dilindungi dari “pembantaian” oleh OOM dengan mengeset:

# echo -17 >/proc/<PID>/oom_adj

di mana <PID> adalah process ID yang bersangkutan. Anak proses akan mewarisi setting oom_adj ini.

Catatan: di Spanel 1.2, boot script /etc/init.d/ssh telah ditambahi baris berikut seperti ini:

echo -17 > /proc/`cat /var/run/sshd.pid`/oom_adj

untuk melindungi sshd dari OOM killer.

Referensi/link

  • Dokumentasi subsistem VM kernel Linux (subdirektori Documentation/vm)
  • Search engine dengan keyword-keyword seperti:
    • handling oom condition on linux
    • oom_adj
    • oom_pardon (patch tidak resmi lain di Linux untuk melindungi proses dari OOM killer; yang masuk Linux adalah oom_adj)
    • kernel panic automatic reboot

Resita has written 705 articles