All Products
Search
Document Center

:Konfigurasikan partisi swap untuk instans Linux

Last Updated:Jun 22, 2026

Saat instans Alibaba Cloud ECS kehabisan memori fisik, mengonfigurasi ruang swap merupakan solusi darurat yang hemat biaya. Ruang swap menggunakan disk space sebagai memori virtual untuk mencegah error out-of-memory (OOM) dan menjaga sistem tetap berjalan ketika memori fisik telah habis.

Penting
  • Jika instans ECS kekurangan memori, kami menyarankan terlebih dahulu menambah memori fisik dengan mengubah tipe instans.

  • Kami tidak menyarankan menggunakan partisi swap pada basic disk karena performa I/O-nya yang rendah dapat menyebabkan bottleneck sistem. Untuk jenis cloud disk lainnya, Anda dapat menggunakan partisi swap sesuai kebutuhan. Namun, Anda harus mengonfigurasikannya dengan benar untuk menghindari swapping yang terlalu sering dan menjaga stabilitas sistem.

Metode 1: Gunakan plugin Cloud Assistant (direkomendasikan)

Penting

Untuk mengonfigurasi partisi swap secara otomatis, Anda harus menginstal Cloud Assistant Agent. Jika instans Anda tidak mendukung Cloud Assistant atau Anda tidak dapat menginstal agen tersebut, gunakan Metode 2 untuk mengonfigurasi swap secara manual.

Aktifkan partisi swap

  1. Login ke instans ECS.

    1. Buka ECS console - Instances. Di pojok kiri atas, pilih wilayah dan resource group untuk instans target.

    2. Buka halaman detail instans target. Klik Connect dan pilih Workbench. Ikuti prompt di layar untuk mengakses terminal.

  2. Jalankan perintah berikut untuk mengaktifkan partisi swap.

    acs-plugin-manager --exec --plugin ACS-ECS-SwapConfig --params  --enable

    Output berikut menunjukkan bahwa partisi swap berhasil diaktifkan.

    [INFO] The system support auto config swap partition.
    [INFO] Alibaba Cloud Swap Configuration Document:https://www.alibabacloud.com/help/en/ecs/support/how-do-i-configure-the-swap-partition-of-a-linux-instance
    [INFO] Turn On Swap......
    [INFO] RAM size: 8 G
    [INFO] Swap size: 8 G
    [INFO] Check disk available size......
    [INFO] Disk available size: 33 G
    [INFO] Disk available size enough
    [INFO] Recover swap configuration from /etc/fstab
    [INFO] Config vm.swappiness=20 to /etc/sysctl.conf
    [SUCCESS] Swap has been turned on.
    Catatan

    Plugin ini secara otomatis menetapkan ukuran partisi swap berdasarkan memori sistem sesuai aturan berikut:

    • Jika RAM ≤ 2 GB, maka Ukuran Swap = RAM × 2.

    • Jika 2 GB < RAM ≤ 8 GB, maka Ukuran Swap = RAM.

    • Jika RAM > 8 GB, partisi swap tidak direkomendasikan.

    • Partisi swap tidak direkomendasikan jika akan menyisakan kurang dari 5 GB disk space yang tersedia.

    Nilai default parameter vm.swappiness adalah 20. Untuk menyesuaikan ukuran partisi swap, lihat Metode 2: Konfigurasi manual partisi swap.

Periksa status partisi swap

Jalankan perintah berikut untuk memeriksa status partisi swap.

acs-plugin-manager --exec --plugin ACS-ECS-SwapConfig --params  --status

Output berikut menunjukkan bahwa partisi swap telah diaktifkan.

[INFO] The system support auto config swap partition.
[INFO] Alibaba Cloud Swap Configuration Document:https://www.alibabacloud.com/help/en/ecs/support/how-do-i-configure-the-swap-partition-of-a-linux-instance
[INFO] ========== Swap status ==========
NAME      TYPE SIZE USED PRIO
/swapfile file   8G   0B   -2
[INFO] Swap is enabled

Nonaktifkan partisi swap

Jalankan perintah berikut untuk menonaktifkan partisi swap.

acs-plugin-manager --exec --plugin ACS-ECS-SwapConfig --params  --disable

Output berikut menunjukkan bahwa partisi swap berhasil dinonaktifkan.

[INFO] The system support auto config swap partition.
[INFO] Alibaba Cloud Swap Configuration Document:https://www.alibabacloud.com/help/en/ecs/support/how-do-i-configure-the-swap-partition-of-a-linux-instance
[INFO] Turn Off Swap......
[INFO] Cancel swap configuration from /etc/fstab
[INFO] Config vm.swappiness=0 to /etc/sysctl.conf
[INFO] Deleted swapfile: /swapfile
[SUCCESS] Swap has been turned off.

Metode 2: Konfigurasi manual

Aktifkan partisi swap

Langkah 1: Periksa status swap saat ini

Sebelum memulai, pastikan sistem Anda tidak memiliki konfigurasi swap yang sudah ada untuk menghindari konflik.

  1. Login ke instans ECS.

    1. Buka ECS console - Instances. Di pojok kiri atas, pilih wilayah dan resource group untuk instans target.

    2. Buka halaman detail instans target. Klik Connect dan pilih Workbench. Ikuti prompt di layar untuk mengakses terminal.

  2. Periksa konfigurasi partisi swap.

    swapon --show
    • Jika perintah tidak menghasilkan output, artinya belum ada swap yang dikonfigurasi dan Anda dapat melanjutkan ke langkah berikutnya.

    • Jika output seperti berikut ditampilkan, artinya sudah ada ruang swap aktif. Anda dapat menonaktifkan dan membersihkan file swap atau membuat file swap baru di disk yang berbeda.

      image

Langkah 2: Buat dan siapkan file swap

  1. Buat file swap.

    Contoh ini menunjukkan cara membuat /swapfile berukuran 1 GiB. Kami menyarankan menggunakan perintah fallocate. Perintah ini dapat langsung mengalokasikan ruang file dan jauh lebih efisien dibandingkan dd.

    # Create a 1 GiB swap file
    sudo fallocate -l 1G /swapfile
    Jika sistem file (seperti versi awal XFS) tidak mendukung fallocate, sistem akan mengembalikan error fallocate failed: Operation not supported. Dalam kasus ini, gunakan perintah dd untuk membuat file tersebut, meskipun prosesnya lebih lama.
    sudo dd if=/dev/zero of=/swapfile bs=1M count=1024
    • Nilai of yaitu /swapfile adalah variabel yang dapat disesuaikan dan merepresentasikan identifier untuk partisi swap, serta tidak boleh sama dengan identifier partisi yang sudah ada.

    • Nilai bs dan count menentukan ukuran file swap dan dapat disesuaikan. Misalnya, bs=1M count=1024 mengatur ukuran file swap menjadi 1 GB.

  2. Tetapkan izin yang aman.

    Untuk mencegah pengguna non-root membaca file swap yang mungkin berisi data sensitif seperti password dan kunci, atur izinnya menjadi 600.

    sudo chmod 600 /swapfile
  3. Tandai file tersebut sebagai ruang swap.

    sudo mkswap /swapfile

    Tanggapan sukses akan tampak seperti berikut:

    Setting up swapspace version 1, size = 1 GiB (1073737728 bytes)
    no label, UUID=a1a7e24c-38f6-41a4-9e18-be60b631133a
    Catatan: Ukuran file swap harus lebih besar dari 40 KB. Jika tidak, perintah mkswap akan melaporkan error.

Langkah 3: Aktifkan dan verifikasi file swap

Aktifkan file swap yang baru dibuat dan pastikan sistem mengenalinya.

  1. Aktifkan file swap.

    sudo swapon /swapfile
  2. Verifikasi bahwa swap telah diaktifkan.

    swapon --show

    Setelah aktivasi berhasil, output-nya sebagai berikut:

    NAME       TYPE SIZE USED PRIO
    /swapfile  file   1G   0B   -2

    Atau, jalankan free -h. Baris Swap seharusnya menampilkan ukuran totalnya.

Langkah 4: Pastikan persistensi

Tulis konfigurasi Swap ke file /etc/fstab agar Swap tetap berlaku setelah instans restart.

  1. (Direkomendasikan) Backup file fstab untuk mencegah kesalahan operasional.

    sudo cp /etc/fstab /etc/fstab.bak.$(date +%Y%m%d)
  2. Tambahkan konfigurasi Swap ke file fstab.

    Perintah berikut memeriksa entri swap yang sudah ada sebelum menambahkan entri baru untuk mencegah duplikasi.
    SWAP_FILE_PATH="/swapfile"
    if ! grep -q "swap" /etc/fstab; then
        echo "${SWAP_FILE_PATH} none swap sw 0 0" | sudo tee -a /etc/fstab
    else
        echo "Swap entry already exists in /etc/fstab. No changes made."
    fi
  3. Verifikasi konfigurasi persisten.

    Anda dapat memverifikasi bahwa konfigurasi /etc/fstab benar tanpa harus me-restart instans.

    # 1. Disable all swap.
    sudo swapoff -a
    # 2. Remount all swap partitions based on the /etc/fstab file.
    sudo swapon -a
    # 3. Check if swap has been remounted as expected.
    swapon --show

    Jika perintah menghasilkan informasi swap dengan benar, konfigurasi persisten telah berhasil.

Sesuaikan swappiness

swappiness adalah parameter kernel Linux yang mengontrol seberapa agresif sistem menggunakan Swap. Nilainya berkisar antara 0 hingga 100.

  • Nilai lebih tinggi: Kernel lebih agresif menggunakan swap, memindahkan halaman memori yang tidak aktif ke disk lebih cepat.

  • Nilai lebih rendah: Kernel menghindari penggunaan swap, lebih memilih menyimpan halaman di memori fisik, dan hanya menggunakan swap ketika memori fisik sangat rendah.

Penting

Penyesuaian parameter swap harus dilakukan dengan hati-hati. Perubahan yang tidak tepat dapat menurunkan performa sistem atau menyebabkan perilaku memori virtual yang tidak terduga. Lakukan perubahan hanya jika workload spesifik Anda memerlukannya dan Anda sepenuhnya memahami fungsi parameter tersebut. Jika ragu, pertahankan konfigurasi default.

Rekomendasi berdasarkan skenario:

Skenario Penerapan

Nilai swappiness yang direkomendasikan

Alasan

Database (MySQL, PostgreSQL)

1–10

Untuk memastikan performa kueri, hindari swapping kolam buffer inti mereka.

Database in-memory (Redis, Memcached)

1

Database in-memory sangat sensitif terhadap latensi. Aktivitas swap apa pun dapat sangat menurunkan performa. Nilai 1 berarti swap hanya digunakan saat benar-benar diperlukan.

Server aplikasi web (Nginx, Apache)

10–60

Menyeimbangkan kecepatan respons dan pemanfaatan memori dengan memungkinkan halaman proses non-inti yang tidak aktif di-swap keluar.

Workload umum/batch/default

60 (default sistem)

Cocok untuk sebagian besar skenario tujuan umum. Memungkinkan sistem melakukan swap proses yang tidak aktif untuk membebaskan memori fisik bagi tugas aktif.

Prosedur:

  1. Edit file /etc/sysctl.conf. Misalnya, untuk menggunakan partisi swap hanya ketika memori fisik kurang dari 10%, Anda perlu menyesuaikan nilai parameter berikut.

    vm.swappiness=10
  2. Simpan file dan keluar. Lalu, jalankan perintah berikut untuk menerapkan konfigurasi.

    sudo sysctl -p
  3. Verifikasi bahwa konfigurasi parameter swappiness telah diterapkan.

    cat /proc/sys/vm/swappiness

    Output berikut menunjukkan bahwa konfigurasi parameter swappiness telah diterapkan.

    image

Pantau penggunaan swap

Tujuan pemantauan

Perintah yang direkomendasikan

Deskripsi

Lihat penggunaan memori dan swap secara keseluruhan

free -h

Perintah paling umum dan langsung.

Pantau aktivitas swap real-time (swap-in/swap-out)

vmstat 1

Perhatikan kolom si (swap-in) dan so (swap-out). Jika kedua kolom ini menunjukkan nilai bukan nol dalam periode yang lama, artinya sistem sering melakukan operasi swap dan mungkin mengalami masalah performa.

Cari proses yang menggunakan swap

for file in /proc/*/status; do awk '/Name:/{n=$2} /VmSwap:/{s=$2} END{if(s>0) printf "%-20s %s\n", n, s"kB"}' $file; done | sort -k2 -hr

Perintah ini melakukan iterasi melalui semua proses, mencantumkan nama dan penggunaan swap setiap proses, lalu mengurutkan hasilnya sehingga proses dengan penggunaan swap tertinggi muncul di atas.

Analisis performa historis

atop

atop adalah tool pemantauan performa canggih yang dapat merekam penggunaan resource historis. Saat sistem menjadi lambat, Anda dapat menggunakan log atop untuk melacak kembali proses dan status resource pada saat masalah terjadi.

Nonaktifkan dan bersihkan swap

Saat file swap tidak lagi diperlukan, nonaktifkan dengan aman dan hapus file tersebut untuk membebaskan disk space.

  1. Nonaktifkan file swap yang ditentukan.

    sudo swapoff /swapfile
  2. Hapus konfigurasi auto-mount dari fstab. Gunakan perintah sed untuk menghapus baris yang sesuai secara aman dan menghindari kesalahan akibat pengeditan manual.

    sudo sed -i '\|/swapfile|d' /etc/fstab
  3. Hapus file swap untuk membebaskan disk space.

    sudo rm /swapfile
  4. Verifikasi bahwa swap benar-benar telah dinonaktifkan.

    Jalankan swapon --show atau free -h untuk memastikan informasi swap telah hilang.

FAQ

Mengapa swap tidak berfungsi seperti yang diharapkan?

Setelah membuat partisi swap dan menyesuaikan parameter swappiness, Anda mungkin melihat fenomena yang membingungkan: meskipun memori fisik berada di bawah tekanan tinggi, penggunaan partisi swap tetap rendah, sehingga tampak seolah-olah pengaturan swappiness belum diterapkan.

Diagnosis masalah

Akar penyebab masalah ini terletak pada mekanisme systemd dan control group (Cgroup) yang banyak digunakan dalam distribusi Linux modern.

  1. Aturan khusus Cgroup: Dalam mode Cgroup v1 default, systemd membuat Cgroup terpisah untuk komponen seperti layanan sistem (system.slice) dan sesi pengguna (user.slice). Setiap Cgroup dapat memiliki parameter kontrol resource sendiri, seperti memory.swappiness.

  2. Pengaturan lokal mengesampingkan pengaturan global: Saat systemd menginisialisasi Cgroup ini, ia menetapkan nilai default memory.swappiness untuk mereka (biasanya 60). Pengaturan khusus Cgroup ini mengambil prioritas dibandingkan pengaturan global vm.swappiness yang dikonfigurasi di /etc/sysctl.conf.

  3. Hasil: Program yang berjalan sebenarnya mengikuti aturan swappiness milik Cgroup-nya, bukan aturan global, sehingga konfigurasi global menjadi tidak efektif.

Verifikasi cepat
  1. Cari PID proses yang sedang berjalan (misalnya, pidof nginx).

  2. Periksa cgroup tempat proses tersebut berada:

    cat /proc/[PID]/cgroup

    Anda akan melihat path seperti /system.slice/nginx.service.

  3. Periksa nilai swappiness aktual Cgroup ini:

    cat /sys/fs/cgroup/memory/system.slice/nginx.service/memory.swappiness

    Kemungkinan besar output-nya adalah 60 meskipun Anda telah mengatur vm.swappiness global ke nilai lain. Hal ini menunjukkan bahwa konfigurasi global tidak berlaku.

Solusi

Solusi 1: Beralih ke cgroup v2 (direkomendasikan)

Prinsip: cgroup v2 memperbaiki banyak masalah desain pada v1 dan menggunakan struktur hierarkis terpadu. Dalam mode v2, cgroup anak mewarisi konfigurasi dari node induknya secara default. Anda hanya perlu mengonfigurasi vm.swappiness global, dan pengaturan ini secara otomatis serta seragam diterapkan ke semua proses dalam sistem.

Prosedur:

  1. Perbarui parameter boot kernel:
    Gunakan tool grubby untuk menambahkan parameter systemd.unified_cgroup_hierarchy=1 ke semua kernel guna mengaktifkan cgroup v2.



    sudo grubby --update-kernel=ALL --args="systemd.unified_cgroup_hierarchy=1"
    Catatan: Perintah ini bersifat persisten. Ini memodifikasi konfigurasi boot GRUB, sehingga sistem akan diinisialisasi dalam mode cgroup v2 saat startup berikutnya.
  2. Restart instans ECS:
    Pengaturan ini merupakan parameter tingkat kernel dan memerlukan restart agar berlaku.



    sudo reboot
  3. Verifikasi dan konfigurasi:

    • Verifikasi: Setelah restart, jalankan mount | grep cgroup. Jika Anda melihat titik mount bertipe cgroup2, artinya Anda telah berhasil beralih ke cgroup v2.

    • Konfigurasi: Tetapkan nilai vm.swappiness yang diinginkan di /etc/sysctl.conf, lalu jalankan sudo sysctl -p untuk menerapkan pengaturan ke seluruh sistem.

Solusi 2: Konfigurasi persistensi di cgroup v1 (alternatif)

Jika lingkungan Anda tidak dapat dialihkan karena alasan tertentu (misalnya, menjalankan perangkat lunak container lama yang tidak kompatibel dengan cgroup v2), Anda dapat menggunakan konfigurasi drop-in systemd untuk mengatasi masalah ini.

Prinsip: Metode ini tidak lagi bergantung pada konfigurasi global yang berpotensi bermasalah. Sebaliknya, metode ini secara langsung menginstruksikan systemd untuk menggunakan nilai swappiness yang ditentukan saat membuat slice inti.

Prosedur:

  1. Buat konfigurasi override untuk system.slice (ini memengaruhi semua layanan sistem):

    Ganti 60 dengan nilai swappiness yang diinginkan.

    sudo mkdir -p /etc/systemd/system/system.slice.d/
    sudo tee /etc/systemd/system/system.slice.d/99-swappiness.conf <<'EOF'
    [Slice]
    MemorySwappiness=60
    EOF
  2. Buat konfigurasi override untuk user.slice (ini memengaruhi semua sesi login pengguna).

    Ganti 60 dengan nilai swappiness yang diinginkan.

    sudo mkdir -p /etc/systemd/system/user.slice.d/
    sudo tee /etc/systemd/system/user.slice.d/99-swappiness.conf <<'EOF'
    [Slice]
    MemorySwappiness=60
    EOF
  3. Terapkan konfigurasi.

    sudo systemctl daemon-reload
    sudo reboot
    daemon-reload hanya memuat ulang konfigurasi systemd. Untuk memastikan semua layanan dan sesi dibuat di bawah konfigurasi Slice baru, Anda harus me-restart server.