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.
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.
Login ke instans ECS.
Buka ECS console - Instances. Pada bilah navigasi atas, pilih wilayah dan resource group yang dituju.
Buka halaman detail instans target. Klik Connect dan pilih Workbench. Ikuti petunjuk di halaman untuk login ke terminal.
Periksa konfigurasi partisi swap.
swapon --showJika 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.

Langkah 2: Buat dan siapkan file Swap
Buat file swap.
Contoh ini membuat file swap berukuran 1 GiB bernama
/swapfilemenggunakan perintahfallocate. Perintah ini mengalokasikan ruang file secara instan dan lebih efisien dibandingkandd.# Buat file swap 1 GiB sudo fallocate -l 1G /swapfileJika sistem file, seperti versi awal XFS, tidak mendukung
fallocate, sistem akan menampilkan pesanfallocate failed: Operation not supported. Dalam kasus ini, gunakan perintahddsebagai gantinya. Perintah ini memerlukan waktu lebih lama untuk dijalankan.sudo dd if=/dev/zero of=/swapfile bs=1M count=1024Nilai
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
bsdancountmenentukan ukuran file swap. Anda dapat menyesuaikan nilai-nilai tersebut. Pada perintah ini,bs=1M count=1024mengatur ukuran file swap menjadi 1 GB.
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 /swapfileFormat file sebagai area swap. Langkah ini menandai file untuk digunakan sebagai swap space.
sudo mkswap /swapfileTanggapan sukses akan mirip seperti berikut:
Setting up swapspace version 1, size = 1 GiB (1073737728 bytes) no label, UUID=a1a7e24c-38f6-41a4-9e18-be60b631133aCatatan: File swap harus berukuran lebih besar dari 40 KB. Jika tidak, perintah
mkswapakan mengembalikan error.
Langkah 3: Aktifkan dan verifikasi Swap
Aktifkan file swap dan pastikan sistem mengenalinya.
Aktifkan file swap.
sudo swapon /swapfileVerifikasi bahwa file swap telah diaktifkan.
swapon --showSetelah berhasil diaktifkan, output berikut akan muncul:
NAME TYPE SIZE USED PRIO /swapfile file 1G 0B -2Alternatifnya, Anda dapat menjalankan perintah
free -huntuk memeriksa status swap. BarisSwappada 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.
(Direkomendasikan) Backup file
fstabuntuk mencegah masalah akibat operasi yang salah.sudo cp /etc/fstab /etc/fstab.bak.$(date +%Y%m%d)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." fiVerifikasi konfigurasi persisten.
Anda dapat memverifikasi kebenaran konfigurasi
/etc/fstabtanpa 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 --showJika 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.
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 | 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:
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=10Simpan dan keluar dari file. Lalu, jalankan perintah berikut untuk menerapkan konfigurasi.
sudo sysctl -pJalankan perintah berikut untuk memverifikasi bahwa konfigurasi parameter
swappinesstelah berlaku.cat /proc/sys/vm/swappinessOutput yang mirip seperti berikut menunjukkan bahwa konfigurasi parameter
swappinesstelah berlaku.
Pantau penggunaan Swap
Tujuan pemantauan | Perintah yang direkomendasikan | Deskripsi |
Lihat penggunaan memori dan Swap secara keseluruhan |
| Perintah paling umum dan langsung. |
Pantau aktivitas Swap real-time (swap-in/swap-out) |
| Fokus pada kolom |
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 |
|
|
Nonaktifkan dan bersihkan Swap
Ketika file swap tidak lagi diperlukan, Anda dapat menonaktifkannya dengan aman dan menghapus file tersebut untuk membebaskan ruang disk.
Nonaktifkan file swap tertentu.
sudo swapoff /swapfileHapus konfigurasi mount otomatis dari
/etc/fstab. Anda dapat menggunakan perintahseduntuk menghapus baris yang sesuai secara aman dan menghindari kesalahan edit manual.sudo sed -i '\|/swapfile|d' /etc/fstabHapus file swap untuk melepaskan ruang disk.
sudo rm /swapfileVerifikasi bahwa file swap telah sepenuhnya dinonaktifkan.
Jalankan perintah
swapon --showataufree -hdan pastikan informasi swap tidak lagi ditampilkan.
Nonaktifkan partisi swap
Jalankan perintah berikut untuk menonaktifkan partisi swap.
sudo swapoff /swapfileCatatanParameter
/swapfilemenentukan identifier partisi swap. Gantilah dengan identifier aktual dari lingkungan Anda.Edit file
/etc/fstabdan hapus informasi mount swap, seperti entri berikut, untuk menonaktifkan mounting otomatis./swapfile none swap defaults 0 0Simpan dan tutup file. Lalu, jalankan perintah berikut untuk memeriksa apakah partisi swap telah dinonaktifkan.
swapon --showJika hasil perintah kosong, partisi swap telah dinonaktifkan.

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.
Aturan Cgroup lokal: Dalam mode Cgroup v1 default,
systemdmembuat Cgroup terpisah untuk layanan sistem (system.slice), sesi pengguna (user.slice), dan komponen lainnya. Setiap Cgroup dapat memiliki parameter kontrol sumber daya sendiri, termasukmemory.swappiness.Pengaturan lokal mengesampingkan pengaturan global: Saat
systemdmenginisialisasi Cgroup ini, sistem memberikan nilai defaultmemory.swappiness, biasanya 60. Pengaturan spesifik Cgroup ini memiliki prioritas lebih tinggi daripada pengaturan globalvm.swappinessyang Anda konfigurasi di/etc/sysctl.conf.Hasil: Program yang berjalan mengikuti aturan
swappinessdari Cgroup-nya, bukan aturan global. Hal ini membuat konfigurasi global tidak berlaku.
Verifikasi cepat
Temukan Process ID (PID) dari proses yang sedang berjalan. Misalnya, Anda dapat menjalankan perintah
pidof nginx.Periksa Cgroup tempat proses tersebut berada:
cat /proc/[PID]/cgroupOutput akan menampilkan path mirip
/system.slice/nginx.service.Periksa nilai
swappinessaktual untuk Cgroup ini:cat /sys/fs/cgroup/memory/system.slice/nginx.service/memory.swappinessOutput kemungkinan besar adalah
60, meskipun Anda telah mengatur parameter globalvm.swappinesske 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:
Perbarui parameter boot kernel.
Gunakan toolgrubbyuntuk menambahkan parametersystemd.unified_cgroup_hierarchy=1untuk 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.
Restart instans ECS.
Ini adalah parameter tingkat kernel dan memerlukan restart agar berlaku.sudo rebootVerifikasi dan konfigurasi:
Verifikasi: Setelah instans restart, jalankan perintah
mount | grep cgroup. Jika Anda melihat titik mount dengan tipecgroup2, berarti Anda telah berhasil beralih ke Cgroup v2.Konfigurasi: Di file
/etc/sysctl.conf, atur nilaivm.swappinessyang diinginkan dan jalankan perintahsudo sysctl -puntuk 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:
Buat konfigurasi override untuk
system.slice(mempengaruhi semua layanan sistem):Ganti
60dengan nilaiswappinessyang 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 EOFBuat konfigurasi override untuk
user.slice(mempengaruhi semua sesi login pengguna).Ganti
60dengan nilaiswappinessyang 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 EOFRestart untuk menerapkan konfigurasi.
sudo systemctl daemon-reload sudo rebootdaemon-reloadhanya memuat ulang konfigurasisystemd. Untuk memastikan semua layanan dan sesi dibuat di bawah konfigurasi slice baru, Anda harus merestart server.