Lewati ke isi

Server & Infrastruktur

Perlukah Swap di Linux untuk VPS Kecil?

VPS 1 sampai 2 GB tiba-tiba mematikan MySQL? Pahami cara kerja swap, swappiness, dan zram, kapan swap menolong, dan kapan justru menutupi kekurangan RAM.

Terbit 5 menit baca

Jawaban singkat

Untuk VPS 1 sampai 2 GB, swap kecil (sekitar 1 sampai 2 GB) layak dipasang sebagai bantalan agar lonjakan sesaat tidak memicu OOM killer. Tapi kalau swap terpakai terus dan server melambat, itu tanda RAM memang kurang dan solusinya menambah RAM atau mengurangi beban.

Daftar isi
  1. Cara kerja swap dalam satu gambaran
  2. Swappiness dan zram, dua setelan yang sering disalahpahami
  3. Kapan swap menolong, kapan menipu?
  4. Berapa ukuran swap yang masuk akal?
  5. Swap bukan pengganti RAM yang cukup

Tengah malam, website toko online tiba-tiba menampilkan error koneksi database. Kamu login ke VPS dan menemukan MySQL sudah berhenti. Di log kernel ada baris "Out of memory: Killed process" yang menyebut mysqld. Tidak ada serangan, tidak ada update. Server hanya kehabisan RAM sesaat ketika backup terjadwal berjalan bersamaan dengan lonjakan pengunjung.

Kasus seperti ini sering terjadi di VPS kecil, terutama yang tidak punya swap sama sekali. Swap bisa mencegahnya, tapi swap juga bisa menyembunyikan masalah yang lebih besar. Kuncinya ada pada memahami apa yang sebenarnya dikerjakan swap.

Cara kerja swap dalam satu gambaran

Swap adalah ruang di disk yang dipakai kernel Linux sebagai perpanjangan RAM. Ketika memori fisik mulai penuh, kernel memindahkan halaman memori yang jarang dipakai ke swap, sehingga RAM bisa dipakai untuk hal yang lebih mendesak. Kalau halaman itu dibutuhkan lagi, kernel membacanya kembali dari disk.

Masalahnya, disk jauh lebih lambat daripada RAM, bahkan disk NVMe. Selama yang dipindahkan hanya memori yang jarang disentuh (misalnya bagian proses yang menganggur), kamu tidak akan merasakan apa-apa. Kalau yang dipindahkan adalah memori yang terus dipakai, server mulai bolak-balik membaca dan menulis swap. Kondisi ini disebut thrashing, dan server terasa seperti membeku.

Tanpa swap, kernel tidak punya tempat untuk memindahkan memori. Saat RAM benar-benar habis, ia memanggil OOM killer, yang memilih proses untuk dimatikan. Proses yang dipilih biasanya yang memakai memori paling besar, dan di server web itu sering kali database.

Swappiness dan zram, dua setelan yang sering disalahpahami

vm.swappiness mengatur seberapa cepat kernel memilih memindahkan memori ke swap dibandingkan membuang cache file. Nilai bawaan di banyak distribusi adalah 60. Nilai lebih rendah, misalnya 10 sampai 20, membuat kernel lebih menahan diri sehingga swap dipakai terutama saat benar-benar perlu. Untuk server database, nilai rendah sering dipilih agar data aktif tetap di RAM. Nilai 0 tidak mematikan swap, tapi membuat kernel sangat enggan memakainya.

Kamu bisa melihat nilainya dengan cat /proc/sys/vm/swappiness, mengubahnya sementara dengan sysctl vm.swappiness=10, dan membuatnya permanen dengan menulis baris vm.swappiness=10 di file dalam /etc/sysctl.d/.

zram adalah pendekatan lain: swap yang tidak berada di disk, melainkan di RAM itu sendiri dalam bentuk terkompresi. Kedengarannya aneh, tapi masuk akal. Data yang dikompresi memakan lebih sedikit tempat, jadi RAM efektif bertambah, dan membacanya kembali jauh lebih cepat daripada dari disk. Harganya adalah sedikit beban CPU untuk kompresi.

PilihanLokasiKelebihanKekurangan
Tanpa swapTidak adaPerilaku mudah ditebak, tidak ada I/O swapLonjakan memori langsung memicu OOM killer
Swap file di diskFile di sistem fileMudah dibuat dan diubah ukurannyaLambat bila sering dipakai, menambah I/O disk
Partisi swapPartisi khususSama dengan swap file, sedikit lebih klasikSulit diubah ukurannya di VPS
zramRAM, terkompresiCepat, tidak membebani diskMemakai CPU, tetap memakan sebagian RAM

Di VPS dengan vCPU sedikit dan CPU yang sudah sibuk, zram bisa menambah beban. Di VPS dengan disk lambat atau kuota I/O ketat, zram sering lebih nyaman daripada swap file.

Kapan swap menolong, kapan menipu?

Swap menolong ketika kebutuhan memori naik sesaat lalu turun lagi. Contohnya proses backup, kompresi log, update paket, atau build aplikasi yang hanya berjalan beberapa menit. Dalam situasi itu, swap kecil memberi kernel ruang bernapas, sehingga database tidak dimatikan hanya karena satu lonjakan.

Swap menipu ketika kebutuhan memori memang lebih besar dari RAM secara terus-menerus. Server tidak lagi mati mendadak, tapi semuanya melambat. Halaman web butuh beberapa detik untuk terbuka, dan kamu mengira masalahnya ada di kode atau jaringan. Padahal server sedang thrashing.

Cara membedakannya cukup sederhana. Jalankan free -h untuk melihat berapa swap terpakai, lalu vmstat 1 dan perhatikan kolom si dan so (swap in dan swap out). Swap terpakai beberapa ratus MB tapi si/so mendekati nol berarti kernel hanya memindahkan memori yang menganggur, dan itu sehat. Kalau si/so terus bergerak setiap detik, RAM-mu kurang. Gejala lambat seperti ini dibahas lebih luas di artikel server lambat padahal CPU rendah.

Berapa ukuran swap yang masuk akal?

Aturan lama "swap dua kali RAM" berasal dari zaman ketika RAM sangat kecil dan mahal. Untuk VPS modern, swap berfungsi sebagai bantalan darurat, bukan perpanjangan RAM permanen. Untuk VPS 1 sampai 2 GB, swap 1 sampai 2 GB biasanya cukup. Untuk VPS 4 GB ke atas, 1 sampai 2 GB juga umumnya memadai, kecuali kamu butuh hibernasi, yang hampir tidak pernah dipakai di server.

Membuat swap file di sebagian besar sistem cukup dengan beberapa perintah: fallocate -l 2G /swapfile, lalu chmod 600 /swapfile, mkswap /swapfile, dan swapon /swapfile. Agar tetap aktif setelah reboot, tambahkan baris /swapfile none swap sw 0 0 ke /etc/fstab. Di beberapa sistem file, fallocate tidak didukung untuk swap, dan dd bisa dipakai sebagai gantinya. Cek dokumentasi distribusimu sebelum menerapkan.

Banyak image VPS tidak menyertakan swap secara bawaan, jadi periksa dulu dengan swapon --show. Kalau hasilnya kosong, server belum punya swap.

Swap bukan pengganti RAM yang cukup

Swap yang sehat tidak menggantikan perencanaan kapasitas. Kalau aplikasimu memang butuh 3 GB secara konsisten, VPS 2 GB dengan swap 2 GB tetap akan lambat. Pilihan yang lebih jujur adalah menurunkan pemakaian memori (misalnya mengurangi jumlah worker PHP-FPM, menyetel buffer database sesuai RAM) atau naik ke paket dengan RAM lebih besar. Panduan memilih ukurannya ada di memilih spesifikasi VPS.

Pantau juga tren pemakaian memori dari waktu ke waktu, bukan hanya saat ada masalah. Alat pemantauan seperti yang dibahas di monitoring server dengan Uptime Kuma membantu melihat kapan server mulai butuh ruang lebih.

Ringkasnya, swap kecil adalah asuransi murah bagi VPS 1 sampai 2 GB terhadap OOM killer saat lonjakan sesaat. Setel swappiness lebih rendah untuk server database, pertimbangkan zram bila disk lambat, dan perhatikan si/so di vmstat. Kalau swap terus aktif, jangan tambah swap lagi: tambah RAM atau kurangi beban.

Baca juga