Skip to main content
☘️ Septvean's Documents
Toggle Dark/Light/Auto mode Toggle Dark/Light/Auto mode Toggle Dark/Light/Auto mode Back to homepage

swap | 启用

小内存的服务器,强烈推荐使用 swap,可避免 OOM。

后期要监控 swap 的使用情况。如果 swap 经常使用率过高,说明内存不足。


一、创建 swap 文件(/data/swapfile/2G.swap)

1️⃣ 规划 swap 大小(建议)

安装系统时,创建 swap 分区,大小 8G。

  • 固定配置,以后安装系统时都按这个标准创建 swap 分区。
物理内存 swap 建议
≤ 1GB 1GB
≤ 2GB 2GB
≤ 4GB 4GB
≤ 8GB 8GB
≥ 8GB 8GB (更多意义不大)

2️⃣ 创建目录(如不存在)

mkdir -p /data/swapfile
chmod 755 /data/swapfile

3️⃣ 创建 swap 文件(推荐方式)

AlmaLinux 9 内核 + XFS/EXT4 支持 fallocate

rm -fv /data/swapfile/2G.swap
fallocate -l 2G /data/swapfile/2G.swap

若底层存储不支持 fallocate(极少数情况):

dd if=/dev/zero of=/data/swapfile/2G.swap bs=1M count=2048 status=progress

4️⃣ 设置权限(必须)

chmod 600 /data/swapfile/2G.swap

5️⃣ 初始化 swap

mkswap /data/swapfile/2G.swap

6️⃣ 启用 swap(立即生效)

swapoff -a
swapon /data/swapfile/2G.swap

7️⃣ 验证

swapon --show
free -m

二、配置 /etc/fstab(开机自动挂载)

正确写法(推荐)

/data/swapfile/2G.swap none swap defaults 0 0

立即验证(不重启):

swapoff /data/swapfile/2G.swap
swapon -a
swapon --show
free -m

rc.local 配置

检查 /etc/rc.local 文件,注释或删除 swapon -a 命令。


三、内核参数(sysctl)优化建议(AlmaLinux 9)

目标:尽量不用 swap,但作为 OOM 缓冲存在

1️⃣ 创建独立配置文件(推荐)

vi /etc/sysctl.d/99-swap.conf

2️⃣ 推荐配置(生产通用)

# 尽量避免使用 swap
vm.swappiness = 10

# 内存回收策略(防止过早 OOM)
vm.overcommit_memory = 1

# 脏页写回控制(稳定优先)
vm.dirty_ratio = 20
vm.dirty_background_ratio = 10

# 降低内存碎片压力
vm.min_free_kbytes = 131072

如果是 数据库 / Redis / Elasticsearch

vm.swappiness = 1

不建议设置 vm.swappiness = 0

  • 0 并非“完全禁用”
  • 在极端内存压力下反而更容易 OOM

3️⃣ 立即加载

sysctl --system

4️⃣ 验证

sysctl vm.swappiness

四、systemd 与 swap 的关系(AlmaLinux 9)

  • systemd 会自动生成:
kvm-swapfile.swap

查看状态:

systemctl status kvm-swapfile.swap

列出所有 swap unit:

systemctl list-units --type=swap

五、OOM 行为说明(非常重要)

swap 的真实作用

有 swap 无 swap
系统更抗突发内存 OOM 更早
延迟 OOM 延迟低但风险高
更平滑 更“硬”

swap ≠ 性能优化

swap = 系统保险丝


六、常见坑(AlmaLinux 9 特有)

❌ 1. SELinux

默认 不影响 swapfile

若 swap 无法启用:

restorecon -v /data/swapfile/2G.swap

❌ 2. Btrfs / CoW

/data/swapfile 在 Btrfs 上:

chattr +C /data/swapfile/2G.swap

否则 swap 会失败


❌ 3. 容器宿主机

  • Docker / Podman / K8S 节点
  • 强烈建议保留 swap(但限制使用)
vm.swappiness = 10

七、完整命令汇总(可复制)

mkdir -p /data/swapfile
chmod 755 /data/swapfile

rm -fv /data/swapfile/2G.swap
fallocate -l 8G /data/swapfile/2G.swap

chmod 600 /data/swapfile/2G.swap
mkswap /data/swapfile/2G.swap

swapoff -a
swapon /data/swapfile/2G.swap

echo "/data/swapfile/2G.swap none swap defaults 0 0" >> /etc/fstab

cat >/etc/sysctl.d/99-swap.conf <<EOF
vm.swappiness = 10
vm.overcommit_memory = 1
vm.dirty_ratio = 20
vm.dirty_background_ratio = 10
vm.min_free_kbytes = 131072
EOF

sysctl --system

八、总结

在 AlmaLinux 9 上,swap 文件应作为“低频使用的内存保险”,正确方式是:小 swap + 低 swappiness + 明确 sysctl 控制。