AlmaLinux 实现 zram 与 swap 共存

首先登录 root 用户,确认系统种是否已经开启 zram 与 swap

swapon --show

如果已经开启 swap 但未开启 zram,建议先临时关闭 swap

swapoff -a

在 /etc/fstab 中临时注释掉 swap

# /swapfile none swap defaults

开启 zram

创建以下内容的文件,在加载 Linux 内核期间启用 zram

echo zram > /etc/modules-load.d/zram.conf

创建zram内核模块的配置文件

cat > /etc/modprobe.d/zram.conf << EOF
options zram num_devices=1
EOF

可以通过 num_devices 设置 zram 块设备数量,一般设置为1即可

创建一条udev规则,并在其中指定 zram 的大小,可以通过 ATTR{disksize} 设置 zram 的设备容量大小,一般设置为物理内存的一半即可

cat > /etc/udev/rules.d/99-zram.rules << EOF
KERNEL=="zram0", ATTR{disksize}="512M",TAG+="systemd"
EOF

可以加入 ATTR{comp_algorithm}=”zstd” 参数改变压缩算法,建议不添加使用默认

如果需要更改压缩算法,应先查看系统支持的算法

cat /sys/block/zram0/comp_algorithm

创建 zram 服务

vi /etc/systemd/system/zram.service

输入以下内容

[Unit]
Description=Swap with zram
After=multi-user.target

[Service]
Type=oneshot
RemainAfterExit=true
ExecStartPre=/sbin/mkswap /dev/zram0
ExecStart=/sbin/swapon -p 2 /dev/zram0
ExecStop=/sbin/swapoff /dev/zram0

[Install]
WantedBy=multi-user.target

开机自动启动 zram 服务

systemctl enable zram.service

优化内核参数

sed -i '/vm.swappiness/d' /etc/sysctl.conf
sed -i '/vm.page-cluster/d' /etc/sysctl.conf
sed -i '/vm.vfs_cache_pressure/d' /etc/sysctl.conf

cat >> /etc/sysctl.conf << 'EOF'
vm.swappiness = 100
vm.page-cluster = 0
vm.vfs_cache_pressure = 40
EOF

sysctl -p

重启服务器

reboot

重启后,检查 zram 块设备的状态

zramctl

与 swap 共存

对于小内存的服务器,建议开启 swap

创建 swap 空间

fallocate -l 1G /swapfile
chmod 600 /swapfile

如果是临时关闭 swap,则可以直接进行挂载,注意目录要与之前一致

挂载 swap

swapon /swapfile

这里需要加入 –priority -3 参数来降低 swap 的调度优先级

开机自动挂载 swap

cat >> /etc/fstab << 'EOF'
/swapfile none swap defaults 0 0
EOF

查看 zram 与 swap 共存状态

swapon --show

如果能看到 zram 与 swap 的信息,即配置成功