RAM komputer selalu terbatas, sementara aplikasi tidak pernah berjanji berhenti meminta. Swap adalah katup pengaman Linux untuk situasi itu: area di disk yang dipakai kernel menyimpan halaman-halaman memori yang sedang tidak dipakai, sehingga RAM bisa dipakai untuk halaman yang benar-benar bekerja. Chapter ini membahas alasan swap tetap relevan, pilihan antara partisi swap dan swapfile, cara membuatnya dengan mkswap dan swapon, lalu swappiness — tombol halus yang mengatur seberapa rajin kernel menukar. Pemantauan sisi memorinya sendiri sudah kita bahas di chapter Memory Monitoring .

Mengapa Swap Masih Relevan #

Di era RAM murah, banyak yang bertanya apakah swap masih perlu. Tiga jawabannya: pertama, swap memberi ruang napas saat memori menipis — tanpanya, kernel yang kehabisan RAM memanggil OOM killer yang langsung mematikan proses paling boros, dan proses itu biasanya database Anda. Kedua, halaman yang sudah dingin (misalnya bagian program yang jarang dijalankan) lebih murah dipindah ke disk daripada menahannya di RAM. Ketiga, hibernate menuntut swap karena seluruh isi RAM harus ditumpahkan ke disk saat laptop tidur. Server dengan RAM raksasa kadang memang sengaja tanpa swap, tetapi keputusan itu sadar-risiko, bukan kebetulan.

Partisi Swap atau Swapfile #

Swap bisa tinggal di dua wujud, dan keduanya setara di mata kernel:

AspekPartisi swapSwapfile
Pembuatansaat instalasi, lewat alat partisikapan saja, dengan dd atau fallocate
Mengubah ukuranrepartisi diskmatikan, ganti file, nyalakan lagi
Letakarea khusus di luar filesystemfile biasa di dalam filesystem
Hibernatelangsung cocokperlu offset yang diatur benar

Dahulu swapfile dinilai lambat karena fragmentasi, tetapi pada ext4 modern selisihnya praktis tidak terasa. Pilih partisi bila ukurannya sudah pasti sejak instalasi; pilih swapfile bila Anda ingin fleksibilitas menambah-kurang kapasitas. Catatan khusus: swapfile pada Btrfs memerlukan prosedur tambahan karena sifat copy-on-write-nya — panduannya ada di halaman Swap wiki Arch.

Membuat Swap: mkswap dan swapon #

Urutan pengerjaan swapfile di sistem nyata selalu empat langkah: buat filenya, amankan izinnya, tandatangani, lalu aktifkan:

bash
sudo dd if=/dev/zero of=/swapfile bs=1M count=2048 status=progress
sudo chmod 600 /swapfile
sudo mkswap /swapfile
sudo swapon /swapfile

dd membuat file 2 GiB yang benar-benar terisi — bukan sekadar berlubang — dan chmod 600 memastikan user lain tak bisa membaca isinya, karena swap menyimpan potongan memori apa adanya. mkswap menulis signature, dan swapon mengaktifkannya; keduanya menuntut root karena menyentuh memori. Untuk menjadikannya permanen, baris /swapfile none swap sw 0 0 tinggal ditambahkan ke /etc/fstab seperti contoh di chapter fstab .

Mekanisme penulisan signature-nya bisa kita amati langsung tanpa root, karena mkswap juga mau bekerja pada file biasa:

bash
export PATH="$PATH:/usr/sbin"
truncate -s 64M swapfile.img
chmod 600 swapfile.img
mkswap -L swap-latihan swapfile.img 2>/dev/null | sed 's/UUID=.*/UUID=<nilai-acak>/'
blkid -s TYPE -s LABEL swapfile.img

Output yang Dihasilkan:

text
Setting up swapspace version 1, size = 64 MiB (67104768 bytes)
LABEL=swap-latihan, UUID=<nilai-acak>
swapfile.img: LABEL="swap-latihan" TYPE="swap"

Bedah baris per barisnya:

  1. Baris 1 (export PATH=...): memasukkan /usr/sbin ke PATH — rumah mkswap dan blkid yang tidak dilalui user biasa di lingkungan latihan ini.
  2. Baris 2 (truncate -s 64M ...): membuat file bayangan 64 MiB untuk latihan.
  3. Baris 3 (chmod 600 ...): mengunci izin file, karena swap menyimpan potongan memori apa adanya.
  4. Baris 4 (mkswap -L swap-latihan ...): menulis signature berikut label swap-latihan; sed menyamarkan UUID yang berbeda pada tiap eksekusi supaya contoh bisa diverifikasi.
  5. Baris 5 (blkid -s TYPE -s LABEL ...): membaca balik keduanya — tipe dan label sudah tertanam di file.

Label bisa diganti tanpa membuat ulang swap-nya, pekerjaan rutin setelah menyalin disk agar tidak ada label kembar:

bash
export PATH="$PATH:/usr/sbin"
truncate -s 64M swapfile.img
chmod 600 swapfile.img
mkswap -L nama-lama swapfile.img >/dev/null 2>&1
swaplabel -L nama-baru swapfile.img
swaplabel swapfile.img | sed 's/\(UUID:\).*/\1 <nilai-acak>/'

Output yang Dihasilkan:

text
LABEL: nama-baru
UUID: <nilai-acak>

swaplabel -L menulis label baru tanpa berkomentar, lalu swaplabel tanpa argumen mencetak identitas lengkapnya — label baru dan UUID yang tetap sama. Mematikan swap di sistem nyata cukup sudo swapoff /swapfile; isinya dikembalikan ke RAM dulu, jadi pastikan memorinya cukup.

Memeriksa Swap yang Aktif #

Kernel mencatat swap aktif di /proc/swaps:

bash
cat /proc/swaps

Output yang Dihasilkan:

text
Filename				Type		Size		Used		Priority

Di container latihan ini tidak ada swap aktif, sehingga yang tampil hanya kepala tabelnya — nama file, jenis (partition atau file), ukuran, terpakai, dan prioritas. Pada mesin dengan swap, swapon --show merangkumnya lebih manis; berikut contoh tampilannya:

text
NAME      TYPE      SIZE USED PRIO
/swapfile file        2G 512M   -2
/dev/sda5 partition   4G   0B   -3

Kolom PRIO menjawab swap mana yang dipakai lebih dulu bila ada beberapa: angka lebih besar menang. Prioritas bisa ditentukan sendiri dengan sudo swapon -p 10 /swapfile — berguna untuk memaksa swap di SSD lebih cepat dipakai daripada swap di HDD.

swappiness: Seberapa Rajin Kernel Menukar #

Berapa agresif kernel memindahkan halaman ke swap diatur satu angka: vm.swappiness, bernilai 0 sampai 100. Kita baca nilai yang sedang aktif:

bash
cat /proc/sys/vm/swappiness

Output yang Dihasilkan:

text
60

Nilai 60 itu bawaan kernel, dan angka ini bukan persentase langsung melainkan bobot kecenderungan. Semakin tinggi, semakin berani kernel menukar halaman walau RAM masih longgar; semakin rendah, semakin keras kernel bertahan di RAM. Server database umumnya turun ke 10 atau 1 supaya memori panas tidak pernah tersentak pindah ke disk, sementara desktop biasanya aman di bawaan. Mengubahnya sementara satu baris: sudo sysctl vm.swappiness=10 — dan agar permanen, tulis vm.swappiness=10 ke file /etc/sysctl.d/99-swappiness.conf lalu jalankan sudo sysctl --system. Dokumentasi resmi angka ini ada di admin guide kernel dan perilaku swapon di swapon(8) .

Menentukan Ukuran Swap #

Aturan lama “dua kali RAM” lahir di era RAM 256 MiB dan tidak lagi cocok dipakai mentah-mentah. Panduan yang lebih masuk akal sekarang:

RAMSwap tanpa hibernateKeterangan
≤ 2 GB2 × RAMmemori kecil butuh bantalan tebal
2–8 GB1 × RAMkeseimbangan yang aman
> 8 GB2–4 GB atau sesuai bebanlihat tren free -h dulu

Bila laptop Anda memakai hibernate, swap minimal harus sebesar RAM penuh karena seluruh isinya ikut ditumpahkan. Untuk workload khusus — database besar dengan memori terpesan, misalnya — ukuran terbaik ditentukan dari pengamatan konsumsi memori riil, bukan tabel mana pun.

zram dan zswap untuk RAM Kecil #

Dua kerabat swap menghemat disk untuk mesin RAM kecil: zram membuat block device terkompresi di dalam RAM itu sendiri (jadi swap tanpa disk, bawaan Fedora), sedangkan zswap menahan halaman yang mau ditulis ke disk dalam cache terkompresi dulu. Keduanya dibahas lebih dalam di chapter optimasi storage untuk perangkat lama .

Swap menuntaskan rangkaian “mengolah disk sebagai sumber daya tetap”. Bab berikutnya melangkah ke tingkat yang lebih elastis: mengelola banyak disk sebagai satu kolam kapasitas yang bisa tumbuh kapan pun — itu pekerjaan LVM.