全部产品
Search
文档中心

:Bagaimana cara mengonfigurasi partisi swap untuk instans Linux?

更新时间:Dec 24, 2025

Ketika instans Elastic Compute Service (ECS) kehabisan memori fisik, mengonfigurasi partisi swap merupakan solusi darurat yang hemat biaya dengan memanfaatkan ruang disk sebagai memori virtual. Hal ini dapat mencegah sistem crash akibat error out-of-memory (OOM) selama lonjakan penggunaan memori sesekali dan membantu sistem tetap beroperasi meskipun memori fisik telah habis.

Penting
  • Mengaktifkan partisi swap dapat menurunkan performa I/O memori. Jika instans ECS Anda sering kehabisan memori, solusi utamanya adalah menambah memori fisik dengan mengubah tipe instans.

  • Jangan gunakan partisi swap pada basic disk. Performa I/O-nya yang rendah dapat menyebabkan degradasi performa dan bottleneck I/O. Untuk tipe disk lainnya, Anda dapat menggunakan partisi swap sesuai kebutuhan. Namun, pastikan konfigurasinya tepat untuk menghindari swapping yang terlalu sering, yang dapat berdampak negatif terhadap performa dan stabilitas sistem.

Prosedur

Langkah 1: Periksa status Swap saat ini

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

  1. Login ke instans ECS.

    1. Buka ECS console - Instances. Pada bilah navigasi atas, pilih wilayah dan resource group yang dituju.

    2. Buka halaman detail instans target. Klik Connect dan pilih Workbench. Ikuti petunjuk di halaman untuk login ke terminal.

  2. Periksa konfigurasi partisi swap.

    swapon --show
    • Jika output kosong, berarti sistem belum memiliki partisi swap yang dikonfigurasi. Anda dapat melanjutkan ke langkah berikutnya.

    • Jika output yang ditampilkan mirip seperti berikut, berarti sistem sudah memiliki partisi swap. Anda dapat menonaktifkan partisi swap jika diperlukan, atau membuat file swap baru di disk lain.

      image

Langkah 2: Buat dan siapkan file Swap

  1. Buat file swap.

    Contoh ini membuat file swap berukuran 1 GiB bernama /swapfile menggunakan perintah fallocate. Perintah ini mengalokasikan ruang file secara instan dan lebih efisien dibandingkan dd.

    # Buat file swap 1 GiB
    sudo fallocate -l 1G /swapfile
    Jika sistem file, seperti versi awal XFS, tidak mendukung fallocate, sistem akan menampilkan pesan fallocate failed: Operation not supported. Dalam kasus ini, gunakan perintah dd sebagai gantinya. Perintah ini memerlukan waktu lebih lama untuk dijalankan.
    sudo dd if=/dev/zero of=/swapfile bs=1M count=1024
    • Nilai of, yaitu /swapfile, merupakan variabel yang merepresentasikan path dan nama file swap. Anda dapat menyesuaikan nilai ini, tetapi tidak boleh sama dengan nama file atau partisi yang sudah ada.

    • Nilai bs dan count menentukan ukuran file swap. Anda dapat menyesuaikan nilai-nilai tersebut. Pada perintah ini, bs=1M count=1024 mengatur ukuran file swap menjadi 1 GB.

  2. Atur izin yang aman.

    Atur izin file swap menjadi 600. Hal ini mencegah pengguna non-root membaca file swap, yang mungkin berisi data sensitif seperti password atau kunci yang telah di-swap keluar dari memori.

    sudo chmod 600 /swapfile
  3. Format file sebagai area swap. Langkah ini menandai file untuk digunakan sebagai swap space.

    sudo mkswap /swapfile

    Tanggapan sukses akan mirip seperti berikut:

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

Langkah 3: Aktifkan dan verifikasi Swap

Aktifkan file swap dan pastikan sistem mengenalinya.

  1. Aktifkan file swap.

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

    swapon --show

    Setelah berhasil diaktifkan, output berikut akan muncul:

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

    Alternatifnya, Anda dapat menjalankan perintah free -h untuk memeriksa status swap. Baris Swap pada output menunjukkan total ruang swap.

Langkah 4: Konfigurasi mount otomatis saat startup (persistence)

Tambahkan konfigurasi swap ke file /etc/fstab agar file swap tetap aktif setelah instans restart.

  1. (Direkomendasikan) Backup file fstab untuk mencegah masalah akibat operasi yang salah.

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

    Perintah berikut terlebih dahulu memeriksa entri duplikat untuk menghindari penambahan konfigurasi yang sama dua kali.
    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 kebenaran konfigurasi /etc/fstab tanpa perlu merestart instans.

    # 1. Nonaktifkan semua Swap.
    sudo swapoff -a
    # 2. Pasang ulang semua Swap berdasarkan isi fstab.
    sudo swapon -a
    # 3. Periksa apakah Swap telah dipasang ulang sesuai harapan.
    swapon --show

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

Optimasi dan manajemen

Sesuaikan kecenderungan penggunaan Swap (swappiness)

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

  • Nilai lebih tinggi: Kernel cenderung lebih sering menggunakan swap space dan menukar halaman memori yang tidak aktif ke disk lebih awal.

  • Nilai lebih rendah: Kernel cenderung tidak menggunakan swap space. Sistem lebih memilih menyimpan halaman memori di memori fisik dan hanya menggunakan swap space ketika memori fisik benar-benar hampir habis.

Penting

Menyesuaikan parameter swappiness adalah operasi yang memerlukan kehati-hatian. Modifikasi yang tidak tepat dapat menyebabkan degradasi performa sistem atau penggunaan memori virtual yang tidak terduga. Lakukan operasi ini hanya jika diperlukan untuk skenario bisnis Anda dan Anda memahami sepenuhnya fungsi parameter tersebut. Jika Anda ragu apakah penyesuaian diperlukan, kami menyarankan untuk mempertahankan konfigurasi default.

Rekomendasi berdasarkan skenario:

Skenario aplikasi

Nilai swappiness yang direkomendasikan

Prinsip teknis

Database (MySQL, PostgreSQL)

1-10

Database sensitif terhadap latensi I/O. Hindari swapping kolam buffer intinya untuk menjaga performa kueri.

Database in-memory (Redis, Memcached)

1

Database in-memory sangat sensitif terhadap latensi. Operasi Swap apa pun dapat berdampak parah pada performa. Nilai 1 berarti Swap hanya digunakan saat benar-benar diperlukan.

Server aplikasi web (Nginx, Apache)

10-60

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

Default/Umum/Pemrosesan batch

60 (default sistem)

Cocok untuk sebagian besar skenario umum. Memungkinkan sistem menukar proses sistem yang tidak aktif untuk membebaskan lebih banyak memori fisik bagi tugas aktif.

Metode modifikasi:

  1. Edit file /etc/sysctl.conf. Contoh ini menyesuaikan nilai parameter agar partisi swap hanya digunakan ketika memori fisik yang tersedia kurang dari 10% dari total.

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

    sudo sysctl -p
  3. Jalankan perintah berikut untuk memverifikasi bahwa konfigurasi parameter swappiness telah berlaku.

    cat /proc/sys/vm/swappiness

    Output yang mirip seperti berikut menunjukkan bahwa konfigurasi parameter swappiness telah berlaku.

    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

Fokus pada kolom si (swap-in) dan so (swap-out). Jika kolom-kolom ini secara konsisten menampilkan nilai bukan nol, sistem sedang sering melakukan swapping. Hal ini mungkin mengindikasikan masalah performa.

Temukan proses yang menggunakan Swap

`for file in /proc/*/status; do awk '/VmSwap

Name/{printf 2""2""3}END{ print ""}' $file; done | grep -v "0 kB" | sort -k 2 -n -r

Analisis performa historis

atop

atop adalah tool pemantauan performa yang kuat yang dapat mencatat penggunaan sumber daya historis. Saat sistem tersendat, Anda dapat menggunakan log atop untuk melacak proses dan status sumber daya pada saat masalah terjadi.

Nonaktifkan dan bersihkan Swap

Ketika file swap tidak lagi diperlukan, Anda dapat menonaktifkannya dengan aman dan menghapus file tersebut untuk membebaskan ruang disk.

  1. Nonaktifkan file swap tertentu.

    sudo swapoff /swapfile
  2. Hapus konfigurasi mount otomatis dari /etc/fstab. Anda dapat menggunakan perintah sed untuk menghapus baris yang sesuai secara aman dan menghindari kesalahan edit manual.

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

    sudo rm /swapfile
  4. Verifikasi bahwa file swap telah sepenuhnya dinonaktifkan.

    Jalankan perintah swapon --show atau free -h dan pastikan informasi swap tidak lagi ditampilkan.

Nonaktifkan partisi swap

  1. Jalankan perintah berikut untuk menonaktifkan partisi swap.

    sudo swapoff /swapfile
    Catatan

    Parameter /swapfile menentukan identifier partisi swap. Gantilah dengan identifier aktual dari lingkungan Anda.

  2. Edit file /etc/fstab dan hapus informasi mount swap, seperti entri berikut, untuk menonaktifkan mounting otomatis.

    /swapfile none swap defaults 0 0
  3. Simpan dan tutup file. Lalu, jalankan perintah berikut untuk memeriksa apakah partisi swap telah dinonaktifkan.

    swapon --show

    Jika hasil perintah kosong, partisi swap telah dinonaktifkan.

    image

FAQ

Apa yang harus saya lakukan jika Swap tidak berperilaku seperti yang diharapkan?

Setelah Anda membuat partisi swap dan menyesuaikan parameter swappiness, Anda mungkin memperhatikan bahwa penggunaan partisi swap tetap rendah meskipun memori fisik berada di bawah tekanan berat. Hal ini dapat membuat pengaturan swappiness tampak tidak berpengaruh.

Diagnosis masalah

Akar penyebab masalah ini terkait dengan mekanisme systemd dan control group (Cgroup) yang digunakan dalam distribusi Linux modern.

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

  2. Pengaturan lokal mengesampingkan pengaturan global: Saat systemd menginisialisasi Cgroup ini, sistem memberikan nilai default memory.swappiness, biasanya 60. Pengaturan spesifik Cgroup ini memiliki prioritas lebih tinggi daripada pengaturan global vm.swappiness yang Anda konfigurasi di /etc/sysctl.conf.

  3. Hasil: Program yang berjalan mengikuti aturan swappiness dari Cgroup-nya, bukan aturan global. Hal ini membuat konfigurasi global tidak berlaku.

Verifikasi cepat
  1. Temukan Process ID (PID) dari proses yang sedang berjalan. Misalnya, Anda dapat menjalankan perintah pidof nginx.

  2. Periksa Cgroup tempat proses tersebut berada:

    cat /proc/[PID]/cgroup

    Output akan menampilkan path mirip /system.slice/nginx.service.

  3. Periksa nilai swappiness aktual untuk Cgroup ini:

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

    Output kemungkinan besar adalah 60, meskipun Anda telah mengatur parameter global vm.swappiness ke nilai yang berbeda. Hal ini mengonfirmasi bahwa konfigurasi global tidak diterapkan.

Solusi

Solusi 1: Beralih ke Cgroup v2 (direkomendasikan)

Prinsip: Cgroup v2 memperbaiki banyak masalah desain Cgroup v1 dan menggunakan hierarki terpadu. Dalam mode Cgroup v2, Cgroup anak mewarisi konfigurasi dari node induknya secara default. Anda hanya perlu mengonfigurasi parameter global vm.swappiness, dan pengaturan tersebut akan secara otomatis diterapkan ke semua proses dalam sistem.

Prosedur:

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

    sudo grubby --update-kernel=ALL --args="systemd.unified_cgroup_hierarchy=1"
    Catatan: Perintah ini bersifat persisten. Perintah ini memodifikasi konfigurasi GRand Unified Bootloader (GRUB) agar sistem diinisialisasi dalam mode Cgroup v2 saat startup berikutnya.
  2. Restart instans ECS.
    Ini adalah parameter tingkat kernel dan memerlukan restart agar berlaku.

    sudo reboot
  3. Verifikasi dan konfigurasi:

    • Verifikasi: Setelah instans restart, jalankan perintah mount | grep cgroup. Jika Anda melihat titik mount dengan tipe cgroup2, berarti Anda telah berhasil beralih ke Cgroup v2.

    • Konfigurasi: Di file /etc/sysctl.conf, atur nilai vm.swappiness yang diinginkan dan jalankan perintah sudo sysctl -p untuk menerapkan pengaturan ke seluruh sistem.

Solusi 2: Konfigurasi persisten di lingkungan Cgroup v1 (alternatif)

Dalam kasus di mana Anda tidak dapat mengubah lingkungan, misalnya saat menjalankan perangkat lunak container lama yang tidak kompatibel dengan Cgroup v2, Anda dapat menggunakan konfigurasi override systemd (drop-in) untuk mengatasi masalah ini.

Prinsip: Alih-alih mengandalkan konfigurasi global yang mungkin tidak efektif, solusi ini mengonfigurasi systemd untuk menggunakan nilai swappiness tertentu saat membuat slices inti.

Prosedur:

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

    Ganti 60 dengan nilai swappiness yang Anda inginkan.

    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 (mempengaruhi semua sesi login pengguna).

    Ganti 60 dengan nilai swappiness yang Anda inginkan.

    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. Restart untuk menerapkan 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 merestart server.