📑 Daftar Isi
- Swappiness itu sebenarnya apa sih?
- Langkah 1 – Cek dulu nilai swappiness dan status swap mu
- Langkah 2 – Set swappiness langsung, tanpa restart
- Langkah 3 – Bikin permanen biar gak balik lagi pas reboot
- Rekomendasi nilai swappiness per workload
- Catatan penting: hati-hati sama swappiness=0
- Jangan lupa barengi dengan setting memori lain
- Troubleshooting: gejala, penyebab, dan perbaikan
- FAQ
Jadi gini, kemarin sore aku lagi santai ngopi sithik, baru aja mau nutup jam kerja, eh masuk ticket. Server production lemot, user mulai komplain, dan yang bikin heran – RAM masih sisa 8GB dari 16GB. Aku cek satu-satu: CPU normal, disk normal, network normal. Terus piye? Akhirnya ketauan, ternyata Linux-nya lagi sibuk swap ke disk padahal RAM-nya nganggur legane. Aneh, to? Nah, dari situ aku makin gali soal swappiness, dan hasilnya aku tulis di sini.
Oke, sebelum lanjut – ini masalah yang bukan bumbu-bumbu aja. Kalau server kamu ngalamin hal yang sama, dampaknya nyata: aplikasi web makin lambat, query database kerasa berat, API response time membengkak, dan manajemen mulai tanya-tanya. Swap itu bukan barang jahat, kok. Tapi kalau kernel terlalu gampang swap pas RAM masih lega, kerjanya malah kontraproduktif. Ibaratnya, kamu punya dapur yang gede, tapi bukannya masak di dapur, kamu malah masak di garasi yang debunya numpuk. Gak efisien, to?
Nah, di sini kita bahas tuntas soal satu parameter kecil yang jarang dilirik: swappiness. Nggih, namanya emang aneh, tapi pengaruhnya ke responsivitas server itu gede banget. Aku bakal kasih langkah cek, cara set sementara sama permanen, plus rekomendasi nilai yang udah aku praktekin di berbagai workload – dari VPS web server sampai dedicated database. Semua perintah di sini udah aku tes di beberapa distro, jadi aman buat dipake.
Terus, sebenernya kenapa server bisa kejadian kayak gini? Ada beberapa pemicu umum. Pertama, nilai default kernel emang 60, artinya kernel cukup agresif buat mindahin halaman anon ke swap. Kedua, workload kayak database atau cache yang punya pola akses memori tinggi. Ketiga, kadang ada aplikasi yang memory leak, bikin mem pressure naik, lalu kernel main aman dengan buang halaman ke swap. Dan yang bikin gemes, fix-nya sebenernya simpel banget: cukup satu baris sysctl.
Swappiness itu sebenarnya apa sih?
Swappiness adalah parameter kernel yang ngatur seberapa agresif Linux pindahin halaman memori (anonymous pages) ke swap space. Nilainya dari 0 sampai 100, dan mulai kernel 5.8 bisa diset sampai 200. Makin gede angkanya, makin cepet dan makin banyak kernel pindahin data ke swap. Makin kecil, kernel makin sabar – data dibiarin di RAM selama masih muat.
Gampangnya gini: bayangin kamu kerja di meja yang super lebar. Meja itu RAM-mu, lemari di sebelah itu swap. Kalau kamu tipe yang rajin beres-beres, barang langsung dipindah ke lemari walau meja masih longgar – nah, itu swappiness tinggi. Kalau kamu tidak, barang dibiarkan di atas meja sampe meja bener-bener mepet. Mayoritas server lebih cocok sama gaya kedua: barang jangan dibuang dari meja selagi masih ada tempat.

Langkah 1 – Cek dulu nilai swappiness dan status swap mu
Jangan asal set. Cek dulu nilai sekarang dan seberapa banyak swap yang udah kepake. Buka terminal root atau sudo, terus jalanin:
cat /proc/sys/vm/swappiness
free -h
swapon --show
Kalau angka pertama keluar 60, berarti masih default. Perhatiin juga kolom swap di output free -h. Kalau swap usage udah menonjol padahal RAM masih sisa banyak, nah – itu pola yang tadi aku bilang. Swap kepake itu normal kok di server, yang jadi masalah justru kalau kepake-nya gak wajar.
Contoh output yang sering aku lihat di lapangan:
root@web:~# cat /proc/sys/vm/swappiness
60
root@web:~# free -h
total used free shared buff/cache available
Mem: 15Gi 5.2Gi 6.1Gi 120Mi 4.1Gi 9.8Gi
Swap: 4.0Gi 1.9Gi 2.1Gi
Nah, 1.9Gi swap kepake padahal available masih 9.8Gi. Jelas kernel-nya keburu nge-swap. Pola kayak gini biasa muncul di server yang masih default-abis, apalagi habis upgrade distro yang bawa workload lebih rame dari sebelumnya.
Langkah 2 – Set swappiness langsung, tanpa restart
Ubah nilainya sekarang juga biar kernel langsung ngerti:
sysctl -w vm.swappiness=10
Verifikasi terus:
sysctl vm.swappiness
vm.swappiness = 10
Angka ini langsung berlaku tapi gak persist. Cocok buat uji coba dulu: jalanin satu dua hari, pantau pakai free -h, atur lagi kalau dirasa perlu. Nek pas, lanjut ke langkah berikutnya biar permanen.
Langkah 3 – Bikin permanen biar gak balik lagi pas reboot
Biar nilai ini bertahan, taruh di konfigurasi sysctl. Cara paling rapi di distro modern: bikin file baru di /etc/sysctl.d/. Kalau file itu belum ada, buat aja:
nano /etc/sysctl.d/99-swappiness.conf
Isi satu baris:
vm.swappiness = 10
Simpen, terus reload:
sysctl --system
Kenapa nama file diawali angka 99? Karena /etc/sysctl.d dibaca urut abjad, jadi 99 memastikan nilai kita menang di atas file bawaan distro kayak 50-default.conf di Ubuntu. Setelah reload, verifikasi lagi, dan cek juga habis reboot buat mastiin nilainya bener-bener nempel.
Rekomendasi nilai swappiness per workload
Ini yang paling sering ditanyain: berapa sih yang pas? Jawabannya tergantung workload. Tapi ini patokan yang aku pake dan udah terbukti di lapangan, termasuk buat setup cPanel yang gampang kena pola load tinggi – aku bahas lebih detail di artikel troubleshoot high load cPanel:
| Workload | Nilai | Keterangan |
|---|---|---|
| Web server umum (Nginx/LiteSpeed + PHP-FPM) | 10 | Responsif, tapi masih ada toleransi buat spike |
| MySQL / MariaDB / PostgreSQL khusus | 1-10 | Kalau bisa 1, biar buffer pool tetep di RAM |
| Redis / Memcached (data penuh di RAM) | 1-10 | Swap = risiko data hilang, jaga biar gak kesentuh |
| cPanel / WHM shared hosting | 10-20 | Banyak akun kecil, butuh toleransi mem pressure |
| Host container / KVM / Proxmox | 10 | Balance antara host dan guest |
| Desktop kantor / laptop RAM kecil | 60 atau 10 | Kalau sering nge-lag, coba turun ke 10 |
Catatan penting: hati-hati sama swappiness=0
Tolong jangan asal set swappiness=0 cuma karena baca artikel jaman dulu. Di kernel 5.8+, nilai 0 dibaca sebagai swap hanya saat darurat. Masalahnya, tmpfs (misal /dev/shm yang dipake MySQL atau Redis) bisa kepaksa evict lebih cepet. Buat keamanan, pake nilai 1. Efeknya nyaris sama, tapi jauh lebih ramah tmpfs.
Banyak artikel lama nyaranin 0 karena di kernel lama artinya beda. Sekarang cara kerjanya udah berubah, dan kalau kamu gak paham konteksnya, malah bakal bikin bug yang susah dilacak. Nilai aman yang sering aku pakai: 10 buat serba-bisa, 1 buat database dedicated. Jangan lupa selalu tes dulu di staging sebelum nyentuh production.
Jangan lupa barengi dengan setting memori lain
Swappiness doang gak akan nolong kalau zona memori-mu kacau. Kalau mau lebih dalam, perhatiin juga vm.min_free_kbytes – cadangan halaman bebas buat kernel – sama vm.vfs_cache_pressure buat cache inode dan dentry. Biasanya aku set min_free_kbytes sekitar 1-3 persen dari total RAM, tapi sesuaikan sama kebutuhan. Ini masih nyambung sama topik yang aku tulis di artikel bedah memory leak server Linux, dan kalau nilai swappiness tiap reboot gak konsisten, cek juga file konfigurasi di /etc/sysctl.conf.
Troubleshooting: gejala, penyebab, dan perbaikan
| Gejala | Kemungkinan penyebab | Perbaikan |
|---|---|---|
| Swap kepake tinggi padahal RAM sisa banyak | Swappiness default 60 terlalu agresif | Set vm.swappiness=10 lalu pantau free -h |
| Nilai reset ke 60 setelah reboot | Setting gak persist, nulis langsung ke /proc | Pakai file di /etc/sysctl.d/ lalu sysctl –system |
| MySQL/PostgreSQL lelet padahal RAM cukup | Kernel keburu swap buffer pool | Set vm.swappiness=1, lalu recover memory |
| OOM killer jalan terus | RAM fisik kurang atau ada memory leak | Tambah RAM atau beresin leak, swappiness bukan obat |
| tmpfs cepet penuh atau evict dini | swappiness=0 bersamaan tmpfs aktif | Ganti ke 1, atau perbesar size tmpfs |
Catatan kecil buat yang jalanin database di VPS RAM terbatas: kalau kamu sering kena crash karena memory, kombinasi swappiness rendah dengan setting MySQL yang bener bisa nolong banget. Baca juga artikel cara fix MySQL crash di VPS RAM kecil biar lengkap. Dan jangan lupa, kalau mau pantau efek tuning ini, saran aku pasang pantau memory pakai Netdata dan Grafana biar keliatan trennya dalam seminggu.
FAQ
Q: Apakah swappiness=0 berarti swap sama sekali gak dipake?
Gak juga. Di kernel yang lebih baru, 0 artinya swap cuma dilakukan saat memori bener-bener darurat (OOM). Tapi hati-hati, 0 bisa bikin tmpfs lebih cepet ke-evict. Buat server, 1-10 jauh lebih aman dan hampir selalu cukup.
Q: Kapan aku harus NAIKIN swappiness, bukan nurunin?
Kalau kamu jalanin proses batch atau aplikasi yang nempatin memori besar dan jarang diakses lagi, naikin swappiness bisa ngebantu karena kernel cepet buang halaman yang gak kepake. Tapi buat database dan web server yang butuh responsivitas tinggi, rendah itu lebih baik. Paham dulu workload-mu, baru tentuin nilainya.
Q: Bisa gak set swappiness per aplikasi atau per cgroup?
Bisa. Di kernel dengan cgroup v2, ada file memory.swappiness di tiap cgroup. systemd juga punya MemorySwapMax. Jadi kalau cuma satu service yang butuh pengecualian, kamu gak harus ubah nilai global yang kena ke semua proses.
Q: Aman gak set swappiness rendah di shared hosting kayak cPanel?
Aman, asal nilainya wajar (10-20). Jangan ekstrem, karena shared hosting punya banyak proses kecil yang naik-turun terus. Kalau semuanya dipaksa stay di RAM, server bisa makin cepet kehabisan memori dan risiko OOM naik.
Udah sih, itu aja. Bookmark artikel ini buat referensi pas lagi tuning server berikutnya, dan coba dulu di staging atau mesin yang gak kritis. Nek ada pengalaman beda atau pertanyaan, drop di komentar ya – sopo ngerti iso nolong temen-temen lain. Matur nuwun wis mampir, lan ojo lali nyimpen backup dulu sebelum ngoprek apa-apa. Santai aja, bakal kelar.