小内存Linux服务器 Swap + ZRAM 配置流程
一、检查当前内存和磁盘
先查看:
1 | free -h |
如果 Swap 为 0B,说明目前没有交换空间。
二、创建 4GB 磁盘 Swap
创建 Swap 文件:
1 | fallocate -l 4G /swapfile |
限制文件权限:
1 | chmod 600 /swapfile |
格式化:
1 | mkswap /swapfile |
启用:
1 | swapon /swapfile |
检查:
1 | free -h |
正常应看到:
1 | NAME TYPE SIZE USED PRIO |
三、让 Swap 重启后自动启用
先检查:
1 | grep swapfile /etc/fstab |
如果没有输出,执行:
1 | echo '/swapfile none swap sw 0 0' >> /etc/fstab |
再次确认:
1 | grep swapfile /etc/fstab |
应该出现:
1 | /swapfile none swap sw 0 0 |
四、安装 ZRAM
Debian 安装:
1 | apt update |
查看配置文件:
1 | cat /etc/default/zramswap |
对于约 1GB 内存的服务器,设置 512MB ZRAM + LZ4:
1 | cat > /etc/default/zramswap <<'EOF' |
这里:
1 | ALGO=lz4 |
表示使用 LZ4 压缩,CPU 开销较低,很适合 2 核 VPS。
1 | SIZE=512 |
表示 ZRAM 的逻辑容量为 512MB。
1 | PRIORITY=100 |
表示 ZRAM 的 Swap 优先级高于磁盘 Swap。
五、启动 ZRAM
执行:
1 | systemctl enable --now zramswap |
如果服务已经启动,可以重新加载:
1 | systemctl restart zramswap |
查看:
1 | systemctl status zramswap --no-pager |
正常可能显示:
1 | Active: active (exited) |
这是正常现象。
zramswap 服务只负责创建和配置 /dev/zram0,初始化完成之后退出,ZRAM 本身继续由 Linux 内核运行。
六、设置 swappiness
如果只有传统磁盘 Swap,一般可以使用较低值,例如:
1 | vm.swappiness=20 |
但启用 ZRAM 后,可以让系统更积极地把冷页面放入 ZRAM。
对于:
1 | 1GB RAM |
推荐:
1 | echo 'vm.swappiness=100' > /etc/sysctl.d/99-swappiness.conf |
立即应用:
1 | sysctl -p /etc/sysctl.d/99-swappiness.conf |
检查:
1 | sysctl vm.swappiness |
应显示:
1 | vm.swappiness = 100 |
七、检查最终配置
依次执行:
1 | free -h |
1 | swapon --show |
1 | zramctl |
1 | sysctl vm.swappiness |
正常情况下,swapon --show 类似:
1 | NAME TYPE SIZE USED PRIO |
free -h 类似:
1 | total used free |
因为:
1 | 512MB ZRAM |
八、确认 ZRAM 是否真正工作
执行:
1 | zramctl |
例如:
1 | NAME ALGORITHM DISKSIZE DATA COMPR TOTAL STREAMS MOUNTPOINT |
主要看:
1 | DATA |
含义是:
1 | DATA = 被交换进去的原始数据量 |
例如:
1 | DATA = 17.4MB |
意味着原本约 17MB 的内存页,压缩以后实际只占约 5MB RAM。
九、ZRAM 和磁盘 Swap 的工作顺序
最终结构是:
1 | 物理 RAM |
由于:
1 | ZRAM PRIO 100 |
Linux 会优先使用 ZRAM,再使用磁盘 Swap。
十、为什么磁盘 Swap 可能仍然有数据
比如:
1 | /swapfile USED 59M |
并不表示优先级失效。
如果那 59MB 是在启用 ZRAM 之前进入 /swapfile 的,Linux 通常不会因为后来出现了高优先级 ZRAM,就立即主动把旧 Swap 页面重新搬过去。
不需要为了清零它执行:
1 | swapoff /swapfile |
对于 1GB 小内存机器,反而可能瞬间造成较大内存压力。
十一、日常监控
平时主要用这三个:
1 | free -h |
查看整体 RAM / Swap:
1 | swapon --show |
查看两个 Swap 的使用量和优先级:
1 | zramctl |
查看 ZRAM 压缩情况。
如果想观察是否正在频繁交换:
1 | vmstat 1 |
重点看:
1 | si |
其中:
1 | si = swap in |
偶尔出现非零很正常。
如果长时间持续大量 si/so,并且服务器明显变卡,说明 1GB 实体内存已经无法满足工作集,需要考虑升级 RAM。
十二、完整的一次性配置命令
顺序执行:
1 | # 创建 4GB 磁盘 Swap |