全部产品
Search
文档中心

Alibaba Cloud Linux:Penyebab dan solusi untuk event OOM Killer

更新时间:Jan 06, 2026

Ketika sistem operasi Linux kekurangan memori, sistem terlebih dahulu memicu memory reclamation untuk membebaskan memori bagi proses lain. Jika memory reclamation gagal mengatasi kondisi kekurangan memori, sistem akan memanggil Out of Memory (OOM) Killer untuk secara paksa menghentikan suatu proses. Tindakan ini membebaskan memori dan mengurangi tekanan memori. Topik ini menjelaskan penyebab dan solusi untuk event OOM Killer pada sistem operasi Alibaba Cloud Linux.

Gejala

Cuplikan log berikut merupakan contoh event OOM Killer pada sistem operasi Alibaba Cloud Linux. Proses test 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

OOM Killer dipicu oleh ketersediaan memori yang tidak mencukupi. Masalah ini terjadi karena dua alasan utama: memori global pada instans tidak mencukupi atau memori dalam cgroup tidak mencukupi. Tabel berikut menjelaskan skenario umum dan penyebab event OOM Killer:

Jenis Alasan

Contoh skenario

Memori cgroup tidak mencukupi

Pada contoh log berikut, 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: Penggunaan memori cgroup /mm_test mencapai batas 200 MB-nya, sehingga memicu OOM Killer.

Memori cgroup induk tidak mencukupi

Pada contoh log berikut, proses test termasuk dalam cgroup /mm_test/2, tetapi OOM Killer dipicu karena cgroup induknya, /mm_test, telah 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: OOM Killer dipicu karena cgroup induk /mm_test mencapai batas memori 200 MB-nya, meskipun cgroup anak /mm_test/2 belum mencapainya.

Memori global tidak mencukupi

Pada contoh log berikut, limit of host menunjukkan bahwa instans kekurangan memori global. Log tersebut menunjukkan bahwa memori bebas (free) pada node memori 0 telah 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: OOM Killer dipicu karena memori bebas instans turun di bawah watermark rendah, dan memory reclamation gagal mengatasi kekurangan memori tersebut.

Memori pada node memori tidak mencukupi

Pada contoh log berikut, beberapa baris penting menunjukkan masalahnya:

  • limit of host menunjukkan bahwa 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 rendahnya (low).

  • Instans masih memiliki jumlah besar memori bebas total (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: Dalam arsitektur Non-Uniform Memory Access (NUMA), sistem operasi dapat memiliki beberapa node memori. Anda dapat menjalankan perintah cat /proc/buddyinfo untuk melihat informasi tentang node tersebut. Jika parameter cpuset.mems membatasi cgroup hanya menggunakan memori dari node tertentu, OOM Killer dapat dipicu meskipun instans secara keseluruhan memiliki memori bebas yang cukup.

Memori sistem buddy tidak mencukupi akibat fragmentasi memori

Berikut adalah analisis catatan log dari skenario OOM Killer:

  • OOM Killer dipicu selama tahap alokasi memori order=3.

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

  • Sistem buddy untuk node memori 0 tidak memiliki blok memori tersedia 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 =

Alasan: Jika sistem buddy kehabisan memori selama proses alokasi memori, sistem operasi memanggil OOM Killer untuk membebaskan memori bagi sistem buddy.

Catatan

Sistem buddy di Linux adalah mekanisme kernel untuk manajemen memori. Sistem ini mengurangi fragmentasi memori serta secara efisien mengalokasikan dan dealokasikan blok memori dengan berbagai ukuran.

Solusi

Ikuti langkah-langkah berikut untuk mendiagnosis dan menyelesaikan masalah berdasarkan skenario OOM Killer spesifik.

Memori tidak mencukupi pada cgroup anak atau induk

Evaluasi proses-proses yang mengonsumsi memori pada instans Anda dan hentikan proses yang tidak diperlukan untuk membebaskan memori. Jika workload Anda membutuhkan lebih banyak memori, Anda dapat melakukan upgrade instans untuk meningkatkan kapasitas memorinya.

  1. Lakukan upgrade instans.

    Untuk informasi selengkapnya, lihat Ikhtisar perubahan konfigurasi instans.

  2. Anda dapat menyesuaikan batas memori cgroup secara manual agar sesuai dengan peningkatan memori aktual.

    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

Jika memori global Anda tidak mencukupi, selidiki area-area berikut:

  • Periksa penggunaan memori slab_unreclaimable.

    cat /proc/meminfo | grep "SUnreclaim"

    slab_unreclaimable adalah memori yang tidak dapat direklamasi oleh sistem. Jika nilainya melebihi 10% dari total memori, hal ini dapat mengindikasikan adanya memory leak pada slab. Jika Anda mencurigai adanya memory leak, lakukan troubleshooting secara manual. Untuk informasi selengkapnya, lihat Apa yang harus saya lakukan jika instans memiliki persentase memori slab_unreclaimable yang tinggi?. Jika masalah tetap berlanjut, kirim tiket untuk mendapatkan dukungan teknis.

  • Periksa penggunaan memori systemd.

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

    Ketika kernel memicu OOM Killer, proses 1 (systemd) dilewati. Oleh karena itu, penggunaan memori systemd biasanya tidak boleh melebihi 200 MB. Jika Anda mengamati penggunaan yang tidak wajar, coba perbarui tools systemd ke versi yang lebih baru.

  • Lihat performa Transparent Huge Pages (THP).

    Mengaktifkan THP dapat menyebabkan pembengkakan memori, yang berpotensi memicu event OOM Killer. Anda dapat menyetel THP untuk mengurangi masalah ini. Untuk informasi selengkapnya, lihat Bagaimana cara menggunakan THP untuk menyetel performa di Alibaba Cloud Linux?.

Memori tidak mencukupi pada node memori tertentu

Untuk mengatasi event OOM Killer yang disebabkan oleh kekurangan memori pada node memori tertentu, konfigurasi ulang antarmuka cpuset.mems agar cgroup dapat menggunakan memori dari node lain yang tersedia.

  1. Jalankan perintah berikut untuk menghitung jumlah node memori dalam sistem.

    cat /proc/buddyinfo
  2. Konfigurasikan antarmuka 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

Untuk mengatasi event OOM Killer yang disebabkan oleh fragmentasi memori, lakukan memory compaction selama jam sepi. Untuk memulai memory compaction, jalankan perintah berikut:

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