All Products
Search
Document Center

Alibaba Cloud Linux:Troubleshoot the OOM Killer

Last Updated:May 28, 2026

Ketika memory reclamation tidak mampu mengatasi kondisi memori rendah pada sistem Linux, kernel akan memanggil OOM Killer untuk menghentikan proses secara paksa. Topik ini mencakup penyebab umum kejadian OOM Killer pada Alibaba Cloud Linux dan cara mengatasinya.

Deskripsi masalah

Log berikut menunjukkan proses test yang memicu OOM Killer:

565 [Sat Sep 11 12:24:42 2021] test invoked oom-killer: gfp_mask=0x62****(GFP_HIGHUSER_MOVABLE|__GFP_ZERO), nodemask=(null), order=0, oom_score_adj=0
566 [Sat Sep 11 12:24:42 2021] test cpuset=/ mems_allowed=0
567 [Sat Sep 11 12:24:42 2021] CPU: 1 PID: 29748 Comm: test Kdump: loaded Not tainted 4.19.91-24.1.al7.x86_64 #1
568 [Sat Sep 11 12:24:42 2021] Hardware name: Alibaba Cloud Alibaba Cloud ECS, BIOS e62**** 04/01/2014

Potensi penyebab

Kejadian OOM Killer disebabkan oleh memori global yang tidak mencukupi atau memori cgroup yang tidak mencukupi. Tabel berikut mencantumkan skenario umum:

Penyebab

Contoh skenario

Memori cgroup tidak mencukupi

Pada log ini, OOM Killer dipicu untuk cgroup /mm_test yang berisi proses test:

[Wed Sep  8 18:01:32 2021] test invoked oom-killer: gfp_mask=0x240****(GFP_KERNEL), nodemask=0, order=0, oom_score_adj=0
[Wed Sep  8 18:01:32 2021] Task in /mm_test killed as a result of limit of /mm_test
[Wed Sep  8 18:01:32 2021] memory: usage 204800kB, limit 204800kB, failcnt 26

Penyebab: cgroup /mm_test mencapai batas memori 200 MB-nya.

Memori cgroup induk tidak mencukupi

Di sini, proses test dalam cgroup /mm_test/2 dihentikan karena cgroup induknya /mm_test mencapai batas memori:

[Fri Sep 10 16:15:14 2021] test invoked oom-killer: gfp_mask=0x240****(GFP_KERNEL), nodemask=0, order=0, oom_score_adj=0
[Fri Sep 10 16:15:14 2021] Task in /mm_test/2 killed as a result of limit of /mm_test
[Fri Sep 10 16:15:14 2021] memory: usage 204800kB, limit 204800kB, failcnt 1607

Penyebab: cgroup induk /mm_test mencapai batas 200 MB-nya, sehingga memicu OOM Killer pada cgroup anak /mm_test/2 meskipun cgroup anak tersebut belum mencapai batasnya sendiri.

Memori global tidak mencukupi

Pada log ini, limit of host menunjukkan memori global tidak mencukupi. Memori bebas (free) pada node 0 turun di bawah watermark rendah (low):

[Sat Sep 11 12:24:42 2021] test invoked oom-killer: gfp_mask=0x62****(GFP_HIGHUSER_MOVABLE|__GFP_ZERO), nodemask=(null), order=0,
[Sat Sep 11 12:24:42 2021] Task in /user.slice killed as a result of limit of host
[Sat Sep 11 12:24:42 2021] Node 0 DMA32 free:155160kB min:152412kB low:190512kB high:228612kB
[Sat Sep 11 12:24:42 2021] Node 0 Normal free:46592kB min:46712kB low:58388kB high:70064kB

Penyebab: Memori bebas turun di bawah ambang batas minimum dan memory reclamation tidak mampu membebaskan cukup halaman memori.

Memori tidak mencukupi pada suatu node memori

Indikator utama dalam log ini:

  • limit of host menunjukkan suatu node memori kehabisan memori.

  • Instans memiliki dua node memori: Node 0 dan Node 1.

  • Memori bebas (free) pada Node 1 berada di bawah watermark rendah (low).

  • Total memori bebas tetap tinggi (free:4111496).

[Sat Sep 11 09:46:24 2021] main invoked oom-killer: gfp_mask=0x62****(GFP_HIGHUSER_MOVABLE|__GFP_ZERO), nodemask=(null), order=0, oom_score_adj=0
[Sat Sep 11 09:46:24 2021] main cpuset=mm_cpuset mems_allowed=1
[Sat Sep 11 09:46:24 2021] Task in / killed as a result of limit of host
[Sat Sep 11 09:46:24 2021] Mem-Info:
[Sat Sep 11 09:46:24 2021] active_anon:172 inactive_anon:4518735 isolated_anon:
    free:4111496 free_pcp:1 free_cma:0
[Sat Sep 11 09:46:24 2021] Node 1 Normal free:43636kB min:45148kB low:441424kB high:837700kB
[Sat Sep 11 09:46:24 2021] Node 1 Normal: 856*4kB (UME) 375*8kB (UME) 183*16kB (UME) 184*32kB (UME) 87*64kB (ME) 45*128kB (UME) 16*256kB (UME) 5*512kB (UE) 14*1024kB (UME) 0     *2048kB 0*4096kB = 47560kB
[Sat Sep 11 09:46:24 2021] Node 0 hugepages_total=360 hugepages_free=360 hugepages_surp=0 hugepages_size=1048576kB
[Sat Sep 11 09:46:24 2021] Node 0 hugepages_total=0 hugepages_free=0 hugepages_surp=0 hugepages_size=2048kB
[Sat Sep 11 09:46:24 2021] Node 1 hugepages_total=360 hugepages_free=360 hugepages_surp=0 hugepages_size=1048576kB
[Sat Sep 11 09:46:25 2021] Node 1 hugepages_total=0 hugepages_free=0 hugepages_surp=0 hugepages_size=2048kB

Penyebab: Pada arsitektur NUMA, cpuset.mems dapat membatasi cgroup hanya menggunakan node memori tertentu. Jika node tersebut habis, OOM Killer akan dipicu meskipun node lain masih memiliki memori bebas. Jalankan cat /proc/buddyinfo untuk melihat status node.

Memori sistem buddy tidak mencukupi akibat fragmentasi memori

Indikator utama dalam log ini:

  • OOM Killer dipicu saat alokasi order=3 (blok kontigu 32 KB).

  • Memori bebas (free) pada node 0 berada di atas watermark rendah (low).

  • Sistem buddy tidak memiliki blok dengan ukuran yang dibutuhkan (0*32kB (M)).

[Sat Sep 11 15:22:46 2021] insmod invoked oom-killer: gfp_mask=0x60****(GFP_KERNEL), nodemask=(null), order=3, oom_score_adj=0
[Sat Sep 11 15:22:46 2021] insmod cpuset=/ mems_allowed=0
[Sat Sep 11 15:22:46 2021] Task in /user.slice killed as a result of limit of host
[Sat Sep 11 15:22:46 2021] Node 0 Normal free:23500kB min:15892kB low:19864kB high:23836kB active_anon:308kB inactive_anon:194492kB active_file:384kB inactive_file:420kB unevi    ctable:0kB writepending:464kB present:917504kB managed:852784kB mlocked:0kB kernel_stack:2928kB pagetables:9188kB bounce:0kB
[Sat Sep 11 15:22:46 2021] Node 0 Normal: 1325*4kB (UME) 966*8kB (UME) 675*16kB (UME) 0*32kB (M) 0*64kB 0*128kB 0*256kB 0*512kB 0*1024kB 0*2048kB 0*4096kB =

Penyebab: Fragmentasi memori mencegah sistem buddy mengalokasikan blok kontigu dengan ukuran yang dibutuhkan, meskipun total memori bebas mencukupi.

Catatan

Sistem buddy adalah pengalokasi memori kernel Linux yang mengelola blok kontigu dengan berbagai ukuran untuk mengurangi fragmentasi.

Solusi

Atasi masalah berdasarkan penyebabnya.

Memori tidak mencukupi dalam cgroup atau cgroup induk

Hentikan proses yang tidak diperlukan untuk membebaskan memori. Jika workload Anda memerlukan lebih banyak memori, lakukan upgrade instans.

  1. Lakukan upgrade instans.

    Ikhtisar perubahan konfigurasi.

  2. Setelah upgrade, sesuaikan secara manual batas memori cgroup.

    sudo bash -c 'echo <value> > /sys/fs/cgroup/memory/<cgroup_name>/memory.limit_in_bytes'

    Ganti <value> dengan batas memori baru untuk cgroup dalam satuan byte dan <cgroup_name> dengan nama cgroup Anda.

Memori global tidak mencukupi

Periksa area berikut:

  • Periksa Penggunaan memori slab_unreclaimable.

    cat /proc/meminfo | grep "SUnreclaim"

    slab_unreclaimable adalah memori yang tidak dapat dikembalikan oleh sistem. Jika melebihi 10% dari total memori, kemungkinan terjadi memory leak slab. Atasi masalah ini menggunakan Apa yang harus saya lakukan jika instans memiliki persentase memori slab_unreclaimable yang tinggi? Jika masalah berlanjut, ajukan tiket.

  • Periksa Penggunaan memori systemd.

    cat /proc/1/status | grep "RssAnon"

    Kernel melewati proses 1 (systemd) saat melakukan OOM kill, sehingga Penggunaan memori systemd sebaiknya tidak melebihi 200 MB. Jika Penggunaan memori terlalu tinggi, perbarui systemd ke versi yang lebih baru.

  • Tinjau kinerja Transparent Huge Pages (THP).

    THP dapat menyebabkan pembengkakan memori yang memicu kejadian OOM. Untuk menguranginya, sesuaikan pengaturan THP seperti yang dijelaskan dalam Bagaimana cara menggunakan THP untuk menyetel kinerja di Alibaba Cloud Linux?

Memori tidak mencukupi pada suatu node memori

Konfigurasi ulang cpuset.mems agar cgroup dapat menggunakan memori dari node tambahan.

  1. Identifikasi node memori dalam sistem Anda.

    cat /proc/buddyinfo
  2. Konfigurasikan parameter cpuset.mems.

    sudo bash -c 'echo <value> > /sys/fs/cgroup/cpuset/<cgroup_name>/cpuset.mems'

    Ganti <value> dengan nomor node memori yang sesuai dan <cgroup_name> dengan nama cgroup Anda.

    Sebagai contoh, jika sistem Anda memiliki tiga node (Node 0, Node 1, dan Node 2) dan Anda ingin cgroup menggunakan memori dari Node 0 dan Node 2, atur <value> menjadi 0,2.

Memori sistem buddy tidak mencukupi akibat fragmentasi memori

Lakukan kompaksi memori selama jam sepi:

sudo bash -c 'echo 1 > /proc/sys/vm/compact_memory'