全部产品
Search
文档中心

Alibaba Cloud Linux:Memecahkan masalah penggunaan memori slab_unreclaimable yang tinggi

更新时间:Jan 09, 2026

Dalam manajemen memori Linux, slab_unreclaimable adalah memori yang dialokasikan oleh slab allocator dan ditandai sebagai tidak dapat direklamasi. Rasio tinggi antara memori yang tidak dapat direklamasi terhadap total memori sistem dapat mengurangi ketersediaan memori dan menurunkan performa sistem. Topik ini menjelaskan cara memecahkan masalah penggunaan memori slab_unreclaimable yang tinggi pada sistem Alibaba Cloud Linux.

Gejala

Saat menjalankan perintah cat /proc/meminfo | grep "SUnreclaim" pada instans Linux untuk memeriksa nilai SUnreclaim, Anda mungkin menemukan nilai tersebut cukup tinggi (misalnya, SUnreclaim: 6069340 kB). Jika nilai ini melebihi 10% dari total memori sistem, hal ini mengindikasikan penggunaan memori slab_unreclaimable yang berlebihan dan kemungkinan adanya memory leak pada slab.

Penyebab

Dalam manajemen memori Linux, slab adalah mekanisme caching yang digunakan kernel untuk mengalokasikan blok memori kecil secara efisien. Komponen atau driver kernel meminta memori dari slab allocator melalui antarmuka alokasi memori seperti kmalloc. Jika komponen atau driver tersebut gagal melepaskan memori dengan benar, jumlah memori yang tidak dapat direklamasi akan meningkat, sehingga mengurangi memori yang tersedia.

Langkah pemecahan masalah

  1. Hubungkan ke instans Linux yang bermasalah.

    Untuk informasi selengkapnya, lihat Pilih metode koneksi remote ECS.

  2. Jalankan perintah berikut untuk mengidentifikasi slab yang menggunakan banyak objects atau memori besar serta ditandai sebagai unreclaimable.

    1. Lihat informasi slab yang paling banyak menggunakan objects atau memori.

      slabtop -s -a

      Pada output perintah, catat nama slab (kolom NAME) yang memiliki nilai tinggi pada kolom OBJ/SLAB.

    2. Periksa apakah slab tersebut bersifat unreclaimable.

      Pada perintah berikut, ganti <slab NAME> dengan nama slab yang memiliki nilai tinggi pada kolom OBJ/SLAB dari langkah sebelumnya.

      cat /sys/kernel/slab/<slab NAME>/reclaim_account

      Sebagai contoh, periksa apakah slab bernama kmalloc-192 bersifat unreclaimable.

      cat /sys/kernel/slab/kmalloc-192/reclaim_account

      Hasil 0 menunjukkan slab tersebut unreclaimable, sedangkan hasil 1 menunjukkan reclaimable.

  3. Identifikasi penyebab tingginya penggunaan memori slab_unreclaimable.

    Anda dapat menggunakan tool crash untuk analisis statis atau tool perf untuk analisis dinamis guna menemukan penyebab memory leak pada slab. Dalam skenario ini, nama slab yang mengalami memory leak adalah kmalloc-192.

    Analisis statis menggunakan tool crash

    1. Jalankan perintah berikut untuk menginstal crash tool.

      sudo yum install crash -y
    2. Instal paket kernel-debuginfo.

      • Alibaba Cloud Linux 3

        sudo yum install -y kernel-debuginfo-<kernel_version> --enablerepo=alinux3-plus-debug
        Catatan

        Ganti kernel_version dengan versi kernel aktual sistem Anda. Gunakan perintah uname -r untuk mengetahui versi kernel.

      • Alibaba Cloud Linux 2

        sudo yum install kernel-debuginfo -y
    3. Jalankan tool crash.

      sudo crash
    4. Di dalam tool crash, jalankan perintah berikut untuk melihat statistik memori slab kmalloc-192.

      kmem -S kmalloc-192

      Jika informasi statistik yang dikembalikan berjumlah besar, Anda dapat menampilkan hanya beberapa baris terakhir, misalnya 10 baris.

      kmem -S kmalloc-192 | tail -n 10

      Berikut adalah contoh output yang dikembalikan:

          SLAB              MEMORY            NODE  TOTAL  ALLOCATED  FREE
        ffffea004c94e780  ffff88132539e000     0     42         29    13
        ffffea004cbef900  ffff88132fbe4000     0     42         40     2
        ffffea000a0e6280  ffff88028398a000     0     42         40     2
        ffffea004bfa8000  ffff8812fea00000     0     42         41     1
        ffffea006842b380  ffff881a10ace000     0     42         41     1
        ffffea0009e7dc80  ffff880279f72000     0     42         34     8
        ffffea004e67ae80  ffff881399eba000     0     42         40     2
        ffffea00b18d6f80  ffff882c635be000     0     42         42     0

      Pada statistik untuk ffff88028398a000, memori bebas (kolom FREE) rendah, sedangkan memori yang dialokasikan (kolom ALLOCATED) tinggi.

    5. Di dalam tool crash, jalankan perintah berikut untuk melihat detail memori ffff88028398a000.

      rd ffff88028398a000 512 -S

      Perintah ini menghasilkan banyak informasi. Ikuti petunjuk untuk mencetak beberapa halaman guna dianalisis. Contohnya:

      Jika fungsi put_cred_rcu muncul berulang kali dalam informasi yang dikembalikan, cari fungsi put_cred_rcu dalam kode sumber kernel Linux.

      void __put_cred(struct cred *cred)
      {
          call_rcu(&cred->rcu, put_cred_rcu);
      }

      Fungsi put_cred_rcu digunakan untuk melepaskan struktur cred secara asinkron. Kehadiran put_cred_rcu di akhir struktur cred mengindikasikan adanya memory leak pada slab pada struktur cred kernel.

    Analisis dinamis menggunakan tool perf

    1. Instal tool perf.

      sudo yum install perf -y
    2. Gunakan perf untuk merekam alokasi memori yang tidak dilepaskan pada kmalloc-192 selama 200 detik.

      sudo perf record -a -e kmem:kmalloc --filter 'bytes_alloc == 192' -e kmem:kfree --filter ' ptr != 0' sleep 200
    3. Simpan data rekaman ke file sementara di direktori saat ini.

      Dalam contoh ini, file sementara diberi nama testperf.txt.

      sudo perf script > testperf.txt
    4. Tampilkan isi file testperf.txt.

      cat testperf.txt

      Periksa entri yang tidak memiliki memori bebas (free), lalu telusuri fungsi terkait dalam kode sumber kernel Linux untuk mengidentifikasi penyebab memory leak.

  4. Setelah menentukan jalur pemanggilan fungsi atau struktur data kernel yang terdampak menggunakan tool seperti crash dan perf, identifikasi sumber spesifik memory leak tersebut dengan bantuan developer kernel atau engineer operasi dan maintenance (O&M) profesional, lalu atasi masalahnya.

    Berikut beberapa solusi yang mungkin:

    • Upgrade kernel atau terapkan Patch.

    • Sesuaikan parameter kernel.

    • Mulai ulang layanan atau modul yang terdampak.

    • Optimalkan aplikasi atau driver.

    • Mulai ulang sistem.

Referensi

Memory leak pada slab mengurangi memori yang tersedia untuk aplikasi pada suatu instans dan menyebabkan fragmentasi memori. Hal ini dapat memicu OOM (out-of-memory) Killer sistem dan menyebabkan fluktuasi performa sistem.