一、检查当前内存和磁盘

先查看:

1
2
3
free -h
swapon --show
df -h

如果 Swap 为 0B,说明目前没有交换空间。


二、创建 4GB 磁盘 Swap

创建 Swap 文件:

1
fallocate -l 4G /swapfile

限制文件权限:

1
chmod 600 /swapfile

格式化:

1
mkswap /swapfile

启用:

1
swapon /swapfile

检查:

1
2
free -h
swapon --show

正常应看到:

1
2
NAME      TYPE SIZE USED PRIO
/swapfile file 4G 0B -2

三、让 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
2
apt update
apt install -y zram-tools

查看配置文件:

1
cat /etc/default/zramswap

对于约 1GB 内存的服务器,设置 512MB ZRAM + LZ4:

1
2
3
4
5
cat > /etc/default/zramswap <<'EOF'
ALGO=lz4
SIZE=512
PRIORITY=100
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
2
3
1GB RAM
512MB ZRAM
4GB 磁盘 Swap

推荐:

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
2
3
NAME       TYPE      SIZE  USED PRIO
/swapfile file 4G 0 -2
/dev/zram0 partition 512M 0 100

free -h 类似:

1
2
3
               total        used        free
Mem: 909Mi ...
Swap: 4.5Gi ...

因为:

1
2
3
4
5
512MB ZRAM
+
4GB 磁盘 Swap
≈
4.5GB Swap

八、确认 ZRAM 是否真正工作

执行:

1
zramctl

例如:

1
2
NAME       ALGORITHM DISKSIZE DATA  COMPR TOTAL STREAMS MOUNTPOINT
/dev/zram0 lz4 512M 17.4M 4.3M 5M 2 [SWAP]

主要看:

1
2
3
DATA
COMPR
TOTAL

含义是:

1
2
3
DATA   = 被交换进去的原始数据量
COMPR = 压缩后的数据大小
TOTAL = ZRAM 实际占用的物理内存

例如:

1
2
DATA  = 17.4MB
TOTAL = 5MB

意味着原本约 17MB 的内存页,压缩以后实际只占约 5MB RAM。


九、ZRAM 和磁盘 Swap 的工作顺序

最终结构是:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
      物理 RAM
│
│ 内存压力增加
▼
┌─────────────────┐
│ ZRAM 512MB │
│ LZ4 压缩 │
│ Priority 100 │
└────────┬────────┘
│
│ ZRAM 不够
▼
┌─────────────────┐
│ /swapfile 4GB │
│ 磁盘交换空间 │
│ Priority -2 │
└─────────────────┘

由于:

1
2
ZRAM        PRIO 100
/swapfile PRIO -2

Linux 会优先使用 ZRAM,再使用磁盘 Swap。


十、为什么磁盘 Swap 可能仍然有数据

比如:

1
2
/swapfile   USED 59M
/dev/zram0 USED 18M

并不表示优先级失效。

如果那 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
2
si
so

其中:

1
2
si = swap in
so = swap out

偶尔出现非零很正常。

如果长时间持续大量 si/so,并且服务器明显变卡,说明 1GB 实体内存已经无法满足工作集,需要考虑升级 RAM。


十二、完整的一次性配置命令

顺序执行:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
# 创建 4GB 磁盘 Swap
fallocate -l 4G /swapfile
chmod 600 /swapfile
mkswap /swapfile
swapon /swapfile

# 设置开机自动挂载
grep -q '^/swapfile ' /etc/fstab || \
echo '/swapfile none swap sw 0 0' >> /etc/fstab

# 安装 ZRAM
apt update
apt install -y zram-tools

# 配置 512MB ZRAM
cat > /etc/default/zramswap <<'EOF'
ALGO=lz4
SIZE=512
PRIORITY=100
EOF

# 启动 ZRAM
systemctl enable zramswap
systemctl restart zramswap

# 设置 swappiness
echo 'vm.swappiness=100' > /etc/sysctl.d/99-swappiness.conf
sysctl -p /etc/sysctl.d/99-swappiness.conf

# 检查状态
echo '===== Memory ====='
free -h

echo '===== Swap ====='
swapon --show

echo '===== ZRAM ====='
zramctl

echo '===== Swappiness ====='
sysctl vm.swappiness