Mitos Server Tanpa Swap: Ketika Apa yang Disebut “Best Practice” Justru Membunuh Sistem
6 min read

Mitos Server Tanpa Swap: Ketika Apa yang Disebut “Best Practice” Justru Membunuh Sistem

Di banyak diskusi DevOps, ada satu kalimat yang sering terdengar seperti dogma:

“Best practice server itu tidak boleh ada swap.”

Kalimat ini terdengar tegas, modern, dan seolah-olah sudah final. Padahal, dalam banyak kasus, pemahaman ini keliru, berbahaya, dan justru mempercepat terjadinya downtime.

Artikel ini membongkar:

  • Asal-usul miskonsepsi no swap
  • Contoh nyata kasus OOM Killer
  • Perbedaan antara performance tuning dan system survivability
  • Best practice swap yang benar untuk server produksi

Asal Mula Mitos: “Server Tidak Boleh Ada Swap”

Mitos ini biasanya lahir dari konteks sempit, lalu digeneralisasi. Hal ini menyebabkan banyak kasus dimana aplikasi dimatikan secara paksa oleh OOM Killer.

Konteks yang Sering Melahirkan Klaim Ini

  1. Latency-sensitive system

    • Trading, dalam sistem seperti ini keberadaan swap jika salah konfigurasi akan memperlambat aplikasi karena penggunaan swap yang terlalu sering.
    • Real-time processing, swap juga akan memperlambat aplikasi karena alasan yang sama.
    • Sistem yang lebih baik mati daripada lambat, kadang ada aplikasi yang secara alami harus memegang prinsip ini.
  2. Pengalaman buruk dengan swap default Linux

    • swappiness terlalu tinggi, membuat penggunaan swap lebih sering.
    • Server terasa hang, karena sering switch context antara memory dan swap.
    • Swap disalahkan, bukan konfigurasinya, seharusnya swap bisa dikonfigurasi agar digunakan saat critical dan saat memory misal-nya menyentuh angka 90%.
  3. Narasi simplistik

    “Kalau pakai swap berarti aplikasinya salah.”

Pernyataan ini sebagian benar, tapi kesimpulannya salah arah.


Fakta Penting yang Sering Diabaikan

Swap ≠ Solusi Performa

Swap memang:

  • Lambat
  • Tidak cocok untuk beban real-time

Namun:

Swap tidak dirancang untuk performa, tapi untuk stabilitas sistem. Hal ini harus dimengerti terlebih dahulu, karena merupakan penyebab kenapa artikel ini dibuat.

OOM Killer Jauh Lebih Brutal daripada Swap

Ketika memory habis dan tidak ada swap:

  • Kernel tidak punya ruang manuver
  • OOM Killer langsung aktif
  • Proses dipilih dan di-SIGKILL

Ciri khas OOM Killer:

  • Tidak bisa ditangkap aplikasi
  • Tidak ada graceful shutdown
  • Bisa mematikan proses paling penting

Dalam banyak kasus, OOM Killer adalah last line of failure dari desain yang keliru.


Studi Kasus Nyata: PHP + No Swap

Kondisi Server

  • RAM: 4GB
  • Swap: tidak ada
  • PHP-FPM worker: banyak
  • memory_limit besar

Yang Terjadi

  • Beberapa request PHP berat berjalan bersamaan
  • Memory sistem mendekati 70–80%, bahkan sampai di atas 90%
  • Kernel kehabisan opsi reclaim
  • OOM Killer mengeksekusi proses PHP

Log menunjukkan:

  • Penggunaan memory PHP ~3GB
  • PHP sebagai kandidat terkuat untuk di-kill

Intinya

Tanpa swap:

OOM Killer tidak punya alternatif selain membunuh proses.

Swap kecil saja sudah cukup untuk menunda dan mencegah eksekusi brutal ini.


Kesalahan Konseptual yang Paling Umum

❌ “Kalau Ada Swap, Server Jadi Tidak Sehat”

Fakta:

  • Server sehat boleh punya swap
  • Yang tidak sehat adalah swap dipakai terus-menerus

❌ “Swap Menyembunyikan Memory Leak”

Fakta:

  • Swap tidak menyembuhkan desain buruk
  • Tapi memberi waktu observasi dan mitigasi

Downtime instan karena OOM justru menghilangkan kesempatan debugging.


Best Practice Swap untuk Server Produksi

Swap Kecil, Bukan Besar

Tujuan swap:

  • Buffer darurat
  • Bukan perpanjangan RAM

Rekomendasi kasar:

  • RAM ≤ 8GB → swap 1–2GB
  • RAM besar → swap kecil tetap berguna

Atur vm.swappiness

Default Linux sering terlalu agresif (sering karena ketidaktahuan ini dan menggunakan konfigurasi default, maka menolak swap).

Rekomendasi:

vm.swappiness = 1 # swap digunakan hanya saat critical

atau

vm.swappiness = 5 # swap digunakan saat penggunaan memory 95%

Artinya:

Swap hampir tidak pernah digunakan, kecuali saat memory kritis atau penggunaan memory diatas 95%.

Swap sebagai Airbag Sistem

Perilaku ideal untuk swap di dalam server:

  • Swap usage hampir selalu 0%, hanya digunakan saat critical atau penggunaan memory sudah sangat besar di dalam server.
  • Naik sebentar saat spike, ini menandakan konfigurasi sudah benar dan swap tidak digunakan sebagai ekstensi memory oleh server.
  • Turun kembali, jika tidak pernah turun maka perlu dicermati ada konfigurasi yang salah.

Jika swap terus aktif, maka:

Itu alarm desain, bukan keberhasilan konfigurasi.

Kombinasikan dengan Memory Limit Aplikasi

Swap bukan solusi tunggal, swap hanya strategy untuk meningkatkan survivability server.

Harus dibarengi:

  • Memory limit aplikasi yang realistis, agar tidak ada aplikasi yang memakan memory secara tidak terukur.
  • Batas worker, sebagian besar aplikasi seperti php, menerapkan batas memory per worker, semakin banyak worker, maka semakin banyak memory secara total yang digunakan oleh aplikasi, ingat total penggunaan memory aplikasi (dalam kontek ini) = max memory aplikasi * jumlah worker.
  • Isolasi workload berat, tempatkan aplikasi dengan workload berat di tempat lain, karena memerlukan treatment tambahan/khusus.

Swap melindungi sistem, bukan membenarkan overcommit memory.

Pantau swap, Jangan mengharamkan swap

Monitoring sangatlah penting, aspek yang perlu dimonitor:

  • Swap usage, untuk mengetahui apakah swap digunakan terus menerus atau penggunaan melebihi ukuran tertentu selama beberapa waktu (ini menandakan ada yang salah karena artinya swap digunakan terus menerus oleh server).
  • OOM log, untuk mengetahui apakah di dalam server ada OOM Killer yang aktif, agar bisa segera dicheck untuk ditindaklanjuti.
  • Memory per proses, untuk mengetahui penggunaan memory oleh setiap proses di server dan melakukan mitigasi jika ada penggunaan memory yang abnormal.

Swap yang dipantau swap yang berbahaya.


Kapan No Swap Memang Masuk Akal?

No swap bisa dibenarkan jika:

  • Sistem ultra low-latency
  • Jenis aplikasi lebih baik mati daripada lambat
  • Aplikasi sudah memory-safe dan dibatasi keras

Di luar itu?

No swap lebih sering menjadi ideologis daripada teknis.


Alasan Penguat Penggunaan Swap (Lainnya)

Tokoh penting Linux seperti Chris Down (Insinyur di Meta/Facebook) berargumen bahwa menjalankan server tanpa swap justru bisa memperburuk stabilitas server, bahkan di server dengan RAM besar sekalipun.

Berikut adalah alasan penguat mengapa tetap menggunakan swap sebagai safety net adalah keputusan yang tepat:

1. Swap Meningkatkan “Efisiensi” RAM

Tanpa swap, data “sampah” (proses yang hanya jalan sekali saat booting dan tidak pernah dipakai lagi) akan terus duduk manis di RAM. Dengan adanya swap, kernel bisa membuang data sampah ini ke disk sehingga RAM fisik yang berharga bisa dialokasikan sepenuhnya untuk File Cache yang membuat performa I/O server jauh lebih cepat.

2. Mencegah “OOM Terlalu Dini”

Tanpa swap, Linux terkadang bisa menjadi terlalu agresif. Saat RAM penuh oleh cache, dan ada aplikasi minta memori tambahan, kernel bisa panik dan menjalankan OOM Killer padahal sebenarnya masih ada ruang jika data pasif dipindahkan sebentar. Swap mencegah “kematian mendadak” yang tidak perlu ini.

3. Memberikan Kesempatan untuk Debugging

Ini adalah poin paling krusial untuk yang tidak punya monitoring:

  1. Tanpa Swap: Aplikasi mati → User komplain → Bingung kenapa mati.
  2. Dengan Swap: Server melambat → Merasa ada yang aneh → Masih bisa masuk lewat SSH → Bisa menjalankan top atau htop untuk melihat proses mana yang memakan RAM sebelum segalanya hancur.

4. Strategi “Golden Middle” (Jalan Tengah)

Untuk eksekusi terbaik, gunakan konfigurasi ini:

  1. Ukuran Swap: 2GB (cukup untuk menampung lonjakan tanpa menghabiskan disk).
  2. Swappiness: Set di angka 1, 5 atau 10. Ini adalah angka “keramat” yang berarti: “Gunakan RAM sampai benar-benar mepet, tapi jangan ragu pindahkan data pasif ke swap jika memang butuh.”
  3. VFS Cache Pressure: Set vm.vfs_cache_pressure = 50. Ini akan membuat kernel lebih suka menyimpan cache file di RAM daripada membuangnya, yang membantu performa aplikasi web seperti PHP.

Tapi sekali lagi, untuk sistem yang menuntut low latency, ketiadaan swap adalah sebuah keharusan, yang terpenting dibarengi dengan observability, strategy recovery dan mitigasi yang ketat.


Kesimpulan Tegas

  • ❌ “Server tidak boleh ada swap” bukan best practice universal
  • ✅ Swap kecil, terkontrol, jarang dipakai adalah best practice stabilitas
  • OOM Killer bukan solusi
  • ✅ Swap memberi survivability

Swap bukan musuh. Ketidaktahuan kontekslah musuh sebenarnya.


Penutup

Dalam sistem produksi, tujuan utama bukan sekadar cepat — tapi tetap hidup di kondisi terburuk.

Server tanpa swap mungkin terlihat bersih di atas kertas, tapi dalam dunia nyata, ia mati lebih cepat saat tekanan datang.

Stabilitas, observability, dan survivability selalu lebih bernilai daripada dogma.

Ada kondisi khusus dimana swap memang sangat tidak direkomendasikan untuk diaktifkan di server, misalnya di kubernetes cluster karena bisa mengganggu perhitungan memory dari kubernetes sendiri terkait alokasi memory pada pod, tetapi artikel ini tidak masuk ke pembahasan di kasus seperti ini yang bahkan swap secara konteks memang harus ditiadakan.