Despite having 32GB of RAM on my Debian Unstable system, I was experiencing random stalls and freezes triggered by memory pressure alerts from psi-notify. Sometimes the system would recover after a few seconds, but often it required a hard reboot. The solution was to expand my existing 4GB encrypted swapfile to 16GB and add ZRAM for compressed swap in RAM.
This builds on my previous guide for setting up encrypted swap on btrfs.
Expand Encrypted Swapfile
First, expand the existing encrypted swapfile from 4GB to 16GB:
# Turn off current swap
sudo swapoff /dev/mapper/swap
sudo systemctl stop systemd-cryptsetup@swap.service
# Remove old swap file
sudo rm /swap/swapfile
# Create new 16GB swap file
sudo btrfs filesystem mkswapfile --size 16g /swap/swapfile
# Reload and restart encrypted swap
sudo systemctl daemon-reload
sudo systemctl start systemd-cryptsetup@swap.service
sudo swapon /dev/mapper/swap
Add ZRAM for Compressed RAM Swap
Install ZRAM tools:
sudo apt update
sudo apt install -y zram-tools
Edit /etc/default/zramswap
:
PERCENT=50 # 50% of RAM → ~16 GB compressed swap
ALGO=zstd # fast and efficient
PRIORITY=100 # higher than disk swap
Enable and start the service:
sudo systemctl enable --now zramswap.service
Tune Swappiness
Lower swappiness so the kernel prefers RAM over swap:
sudo sysctl vm.swappiness=15
echo 'vm.swappiness=15' | sudo tee /etc/sysctl.d/99-swappiness.conf
Verify
Check that both swap devices are active:
sudo swapon --show
cat /proc/swaps
You should see both /dev/mapper/swap
(encrypted disk swap) and /dev/zram0
(compressed RAM) listed as active swap devices.