zram: Swap Terkompresi biar RAM Kecil Tetap Cepat
Diperbaharui 14 November 2026 6:05 AMzram adalah block device di Linux yang menyimpan halaman memori dalam keadaan terkompresi, dan semuanya tetap di RAM. Untuk mesin ber-RAM kecil — VPS 1 GB, laptop lama, atau host container yang mulai sesak — ini cara termurah menambah ruang swap tanpa menyentuh hardware.
Bedanya dengan swap biasa ada di media penyimpanannya. Swap file menulis halaman dingin ke disk, jadi kecepatan ambilnya ditentukan oleh disk. zram menekan ukuran halaman lalu menyimpannya di memori. Yang dibayar bukan waktu tunggu disk, melainkan siklus CPU.
Apa Itu zram dan Beda-nya dengan Swap Biasa
Modul zram membuat perangkat blok /dev/zram0, /dev/zram1, dan seterusnya. Setiap halaman yang ditulis ke perangkat itu dikompresi lebih dulu, baru disimpan di RAM. Dokumentasi kernel menyebut pemakaiannya untuk swap, penyimpanan /tmp, dan cache di bawah /var.
Karena isinya ada di memori, zram tidak persisten: reboot mengosongkannya. Anggap ini tambahan ruang cepat, bukan pengganti disk. Dua rambu dari dokumentasi: rasio kompresi yang diharapkan sekitar 2:1 sehingga device lebih besar dari dua kali RAM hampir tidak berguna, dan device yang belum dipakai hanya memakan sekitar 0,1% dari ukuran yang dideklarasikan.
Kapan zram Cocok, Kapan Justru Bikin Repot
zram masuk akal saat RAM sempit dan beban swap sporadis: VPS staging hasil instalasi LAMP di RAM 1 GB, laptop dengan banyak tab, host Docker berisi service ringan, atau runner CI yang sesekali kehabisan memori.
Sebaliknya, di server ber-RAM melimpah yang praktis tidak pernah menyentuh swap, zram hanya menambah lapisan untuk dipantau tanpa manfaat. Di mesin yang CPU-nya sudah jadi bottleneck, menambah pekerjaan kompresi juga bukan ide bagus. Satu lagi: hibernasi butuh swap persisten, dan zram tidak bisa dipakai untuk itu.
Pasang zram-generator di Distro Populer
Ada dua jalur: konfigurasi manual lewat sysfs dan zramctl, atau pakai generator systemd. Jalur kedua lebih rapi karena device dibuat otomatis saat boot dan dikelola sebagai unit systemd — pola yang sama dengan systemd timer. Proyeknya zram-generator, tag rilis terakhir v1.2.1.
# Ubuntu 24.04 (noble) / Debian 12+: paket ada di repo resmi
sudo apt install systemd-zram-generator
# Fedora
sudo dnf install zram-generator-defaults
# Arch
sudo pacman -S zram-generator
Di Ubuntu 24.04 paket ini ada di komponen universe versi 1.1.2-3. Kalau apt bilang tidak ditemukan, cek dulu apakah universe sudah aktif sebelum mencari sumber lain.
Isi /etc/systemd/zram-generator.conf
Generator membaca konfigurasi dari /run, /etc, /usr/local/lib, lalu /usr/lib — yang pertama ditemukan menang. Untuk konfigurasi lokal, pakai path di /etc. Setiap section [zramN] mewakili satu device.
# /etc/systemd/zram-generator.conf
[zram0]
zram-size = min(ram / 2, 4096)
compression-algorithm = zstd
swap-priority = 100
options = discard
zram-sizemenentukan ukuran device sebagai fungsiMemTotal. Default-nyamin(ram / 2, 4096)MB: mesin 2 GB dapat 1 GB, mesin 16 GB dibatasi 4 GB.compression-algorithmmemilih algoritma; kalau kosong, default kernel yang dipakai. Daftarnya ada di/sys/block/zram0/comp_algorithm— di kernel 6.8 berisilzo lzo-rle lz4 lz4hc 842 zstd.swap-prioritybernilai -1 sampai 32767, default 100. Angka lebih tinggi berarti dipakai lebih dulu dibanding swap file yang biasanya berprioritas negatif.optionsadalah opsi swapon, defaultdiscard.
Tiga kunci lain yang layak diketahui: host-memory-limit membatalkan pembuatan device kalau RAM di atas batas tertentu, zram-resident-limit membatasi memori residu, dan writeback-device mengalihkan halaman tak terkompresi ke perangkat disk.
Aktifkan dan Verifikasi
Setelah file konfigurasi ada, minta systemd membaca ulang generator lalu start unit device-nya. Nama unit mengikuti device, jadi /dev/zram0 untuk section [zram0].
sudo systemctl daemon-reload
sudo systemctl start /dev/zram0
zramctl
swapon --show
cat /sys/block/zram0/mm_stat
zramctl menampilkan kolom ALGORITHM, DISKSIZE, DATA, COMPR, TOTAL, dan STREAMS. DATA adalah ukuran sebelum dikompresi, COMPR sesudahnya; dokumentasi kernel mengharapkan rasio sekitar 2:1 untuk halaman memori biasa. Di mm_stat, perhatikan orig_data_size, compr_data_size, mem_used_total, dan huge_pages. Kalau huge_pages terus naik, halaman yang tak bisa dikompresi — biasanya data terenkripsi — semakin banyak.
Setel vm.swappiness untuk Swap di RAM
vm.swappiness menerima 0 sampai 200 dengan default 60, dan mengatur seberapa agresif kernel memindahkan halaman ke swap dibanding membuang page cache. Dokumentasi kernel menyebut bahwa untuk swap di memori seperti zram, nilai di atas 100 layak dipertimbangkan: kalau I/O swap dua kali lebih cepat dari filesystem, 133 kira-kira setara.
# uji sementara
sudo sysctl -w vm.swappiness=150
# permanen
echo 'vm.swappiness=150' | sudo tee /etc/sysctl.d/99-zram.conf
sudo sysctl --system
Knob lain yang jarang disentuh: vm.page-cluster. Nilainya logaritmik — 0 berarti satu halaman, 3 berarti delapan halaman, dan 3 adalah default. Menurunkannya membuat fault pertama lebih cepat tapi menambah fault susulan. Ubah hanya kalau ada angka latensi yang mau diperbaiki.
Menghitung Ukuran zram yang Masuk Akal
Mulai dari setengah RAM, sesuai default generator. Setelah beberapa hari, lihat mem_used_total: kalau jauh di bawah ukuran device, tidak ada alasan memperbesar. Kalau huge_pages tinggi, memperbesar justru memperburuk karena halaman tak terkompresi tetap memakan RAM asli. Batas atasnya dua kali RAM, dan selalu sisakan ruang untuk page cache.
Masalah yang Sering Muncul
- Gagal mengubah
disksizedengan-EBUSY. Beberapa atribut tidak bisa diubah setelah device diinisialisasi. Tulis nilai positif ke/sys/block/zram0/resetdulu, danswapofflebih dulu kalau device sedang dipakai. - Device tidak muncul setelah reboot. Cek
systemctl status systemd-zram-setup@zram0.servicedanjournalctl -u-nya. Penyebab umum: nama section tidak cocok, atau file konfigurasi ada di path yang kalah prioritas. - Ingin ganti algoritma di device yang sudah jalan.
comp_algorithmhanya bisa diubah sebelum inisialisasi; setelah itu jalurnya rekompresi lewatrecomp_algorithm, yang butuh dukungan kernel. - Swap file lama seperti tidak terpakai. Itu efek
swap-priority = 100. Bukan kerusakan; samakan prioritasnya kalau ingin dipakai bergantian.
Catatan Produksi
zram bekerja di level host, bukan di dalam container — modul kernel dan sysfs-nya milik host. Kalau server dipantau exporter, ekspos mem_used_total dan compr_data_size, lalu pasang alarm saat mem_used_total mendekati ukuran device: itu tanda kompresi tidak lagi menolong.
Efek samping yang paling terasa biasanya bukan performa, melainkan hilangnya kejadian OOM. Worker yang dulu mati kini bertahan dengan halaman yang ditukar ke zram. Bagus untuk kestabilan, tapi bisa menyamarkan kebocoran memori — pantau tetap perlu, misalnya lewat Laravel Pulse.
FAQ
Apa bedanya zram dengan zswap?
zswap adalah cache kompresi di depan swap disk: halaman dikompresi di RAM, dan saat cache penuh baru ditulis ke disk. zram adalah block device tersendiri yang seluruh isinya di RAM, tanpa lapisan disk kecuali kamu mengaktifkan writeback-device.
Apakah zram membuat CPU naik?
Ya, karena setiap halaman dikompresi dan didekompresi. Di CPU lemah, lz4 atau lzo-rle lebih ringan; zstd memberi rasio lebih baik dengan biaya CPU lebih besar. Pilih dari hasil ukur di mesinmu.
Apakah isi zram hilang saat reboot?
Hilang. zram hidup di RAM, jadi setiap reboot mengosongkannya. Itu juga alasan zram tidak bisa dipakai untuk hibernasi dan bukan pengganti swap file.
Kesimpulan
zram adalah cara termurah menambah ruang swap di mesin ber-RAM kecil: pasang zram-generator, tulis satu file konfigurasi, aktifkan unit-nya, lalu verifikasi lewat zramctl dan mm_stat. Sisanya soal tuning — vm.swappiness di atas 100, ukuran device maksimal dua kali RAM, dan pemantauan huge_pages supaya tidak mengira sudah hemat padahal belum.
Kalau mesinmu ber-RAM melimpah dan tidak pernah menyentuh swap, lewati saja. Teknologi yang tepat adalah yang menjawab masalah yang benar-benar ada.
Referensi