RAM 2 GiB yang berhadapan dengan web modern hidup di bawah tekanan terus-menerus, dan tekanan itu akhirnya dibayar oleh swap: halaman memori dipindahkan ke disk, dan pada HDD tua setiap pemindahan berarti deretan seek mekanis yang mahal. Kabar baiknya, kernel Linux menyediakan beberapa kenop yang bisa kita setel — kapan swap boleh dibuka, ke mana halaman dipindahkan, dan bagaimana tekanan memori direspons. Chapter ini mengatur kenop-kenop itu secara berurutan: swappiness, zram, zswap, lalu kebiasaan aplikasi — semuanya diukur ulang dengan baseline dari Chapter Mengukur Penggunaan Resource .

Swappiness: Mengatur Kapan Kernel Membuka Swap #

Ketika memori mulai sesak, kernel mengambil halaman-halaman yang jarang disentuh dan memindahkannya ke swap demi memberi ruang bagi cache dan aplikasi aktif. Parameter vm.swappiness (nilai 0–100) mengatur seberapa agresif kernel melakukan hal itu. Nilainya bisa dibaca langsung dari procfs:

bash
echo "vm.swappiness         = $(cat /proc/sys/vm/swappiness)"
echo "vm.vfs_cache_pressure = $(cat /proc/sys/vm/vfs_cache_pressure)"

Output yang Dihasilkan:

text
vm.swappiness         = 60
vm.vfs_cache_pressure = 100

Nilai 60 adalah bawaan hampir semua distro — titik tengah yang masuk akal untuk server. Pada desktop lama bersistem HDD, banyak yang menurunkannya ke 10 agar kernel bertahan di RAM lebih lama dan jarang memicu deretan seek yang membuat tampilan berhenti sesaat. Parameter kedua, vm.vfs_cache_pressure, mengatur kecenderungan kernel memangkas cache metadata (inode dan dentry); nilainya yang diturunkan ke 50 menahan metadata lebih lama di RAM sehingga penelusuran direktori di HDD berkurang. Perubahan permanen ditempatkan sebagai file di /etc/sysctl.d/ — berikut fixture-nya:

bash
cat > 99-perangkat-lama.conf <<'AKHIR'
# /etc/sysctl.d/99-perangkat-lama.conf
# Desktop lama dengan HDD: tahan swap dan cache metadata selama mungkin
vm.swappiness = 10
vm.vfs_cache_pressure = 50
AKHIR

grep -v '^#' 99-perangkat-lama.conf | grep -v '^$'

Output yang Dihasilkan:

text
vm.swappiness = 10
vm.vfs_cache_pressure = 50

Baris 1–2 di dalam file adalah komentar penjelas; baris 3 dan 4 adalah dua parameter yang disebut tadi, dan grep -v hanya membuang baris komentar beserta baris kosong agar tampak intinya. Di mesin nyata, file ini disimpan sebagai /etc/sysctl.d/99-perangkat-lama.conf lalu diterapkan dengan sudo sysctl --system; sintaks file-nya dirinci di sysctl(8) dan makna tiap parameter di dokumentasi kernel .

zram: Swap Terkompresi di Dalam RAM #

zram membalik intuisi “swap di disk”: kernel membuat block device di dalam RAM, dan halaman yang hendak ditukar dikompresi lebih dulu — biasanya dengan algoritma zstd atau lz4 — sebelum disimpan ke sana. Halaman yang dingin memang jarang dibaca lagi, dan teks serta kode program terkompresi dengan rasio sekitar 3:1, sehingga 1 GiB alokasi zram mampu menampung kira-kira 3 GiB halaman. Perdagangannya jujur: CPU membayar kompresi — tetapi mengompresi megabyte data jauh lebih murah daripada mengejarnya lewat seek HDD. Pada Debian, paket zram-tools menyiapkan semuanya lewat sudo apt install zram-tools, dan kemajuannya dipantau dengan zramctl. Berikut contoh tampilan zramctl pada laptop tua yang sedang sibuk:

text
NAME       ALGORITHM DISKSIZE   DATA COMPR TOTAL STREAMS MOUNTPOINT
/dev/zram0 zstd           1,9G  1,4G  432M  558M       4 [SWAP]

Kolom DATA adalah ukuran halaman sebelum terkompresi (1,4 GiB) dan TOTAL adalah yang benar-benar terpakai di RAM (558 MiB) — rasio sekitar 2,6:1 pada beban nyata. Efek angka rasio ini layak dilatih sebagai aritmetika karena menentukan keputusan alokasi:

bash
cat > zram-rasio.sh <<'SKRIP'
#!/bin/bash
# zram-rasio.sh <ram-mib> <porsi-persen> <rasio>
ram=$1; porsi=$2; rasio=$3
alokasi=$(( ram * porsi / 100 ))
efektif=$(( alokasi * rasio ))
printf "RAM fisik          : %d MiB\n" "$ram"
printf "dialokasikan zram  : %d MiB (%d%% RAM)\n" "$alokasi" "$porsi"
printf "kapasitas efektif  : %d MiB pada rasio %d:1\n" "$efektif" "$rasio"
printf "RAM untuk aplikasi : %d MiB\n" "$(( ram - alokasi ))"
SKRIP

bash zram-rasio.sh 2048 50 3
bash zram-rasio.sh 2048 50 2

Output yang Dihasilkan:

text
RAM fisik          : 2048 MiB
dialokasikan zram  : 1024 MiB (50% RAM)
kapasitas efektif  : 3072 MiB pada rasio 3:1
RAM untuk aplikasi : 1024 MiB
RAM fisik          : 2048 MiB
dialokasikan zram  : 1024 MiB (50% RAM)
kapasitas efektif  : 2048 MiB pada rasio 2:1
RAM untuk aplikasi : 1024 MiB

Bedah skrip dan hasilnya:

  1. Baris 4–6 (aritmetika bash): $(( ... )) menghitung alokasi dan kapasitas efektif dalam bilangan bulat — untuk kebutuhan perencanaan, presisi MiB sudah lebih dari cukup.
  2. Baris 13 (skenario ideal): mesin 2 GiB yang mengalokasikan setengahnya mendapat “swap” berkapasitas efektif 3072 MiB — swap yang justru lebih besar daripada RAM fisiknya, tanpa satu pun seek disk.
  3. Baris 14 (skenario pesimis): bila data sulit dikompresi (rasio 2:1), kapasitas efektif turun menjadi 2048 MiB; rasio nyata selalu tergantung jenis data, jadi ukur dengan zramctl setelah beberapa hari pemakaian.
  4. Baris 10 (RAM untuk aplikasi): angka yang sering dilupakan — setengah RAM yang dialokasikan berarti aplikasi hidup di 1024 MiB; jangan alokasikan zram terlalu besar di mesin kecil.

zswap: Kompresi di Jalur Disk #

zram bukan satu-satunya pemain. zswap adalah cache LRU terkompresi yang berdiri di depan swap disk: halaman dikompresi ke cache di RAM, dan hanya yang paling dingin benar-benar ditulis ke disk. Pilihan keduanya sederhana — bila disk sangat lambat (HDD tua) atau swap bahkan tidak ada, zram menang telak; bila sudah ada swap di SSD yang cepat dan kapasitas, zswap memanfaatkannya lebih baik. Keduanya tidak butuh partisi khusus, sesuatu yang dibahas tuntas di Chapter Swap Space .

earlyoom dan Kebiasaan Aplikasi #

Dua sentuhan terakhir bersifat praktis. Daemon earlyoom memantau available dan membunuh proses terbesar sebelum kernel kehabisan napas — mencegah momen paling menyakitkan di mesin kecil: sistem membeku total karena kernel sedang sibuk memindahkan halaman sambil mencari kandidat OOM. Sedangkan kebiasaan aplikasi tetap penentu terbesar: pemblokir iklan dan disiplin tab dari Chapter Memilih Distro Ringan menghemat lebih banyak megabyte daripada semua parameter di chapter ini digabung, dan service yang sudah dipangkas di Chapter Mengurangi Aplikasi Background tidak lagi menghabiskan alokasi yang berharga ini. Mekanisme memori kernel di balik semua ini — reclaim, OOM, halaman anonim versus file — dibedah lebih dalam di Chapter Memory Management .

RAM kini bekerja lebih cerdas, tetapi tetap saja perangkat lama menyimpan satu kemacetan yang tidak bisa di-tuning: storage itu sendiri. HDD yang pelan dan SSD yang sempit menuntut strateginya sendiri — topik Chapter Optimasi Storage .