swappiness 虚拟内存设置教程

发布时间: 2026-07-01 热度: 210

一、什么是 swappiness?

vm.swappiness 是 Linux 内核参数,控制系统使用 Swap 交换分区的积极程度

数值范围 含义
0 ~ 100 值越小,越优先使用物理内存;值越大,越积极使用 Swap
默认值 Debian/Ubuntu 默认为 60

二、推荐值参考

使用场景 推荐值 原因
服务器(内存充足) 10 减少磁盘 I/O,提升响应速度
数据库服务器 1 对延迟极度敏感,尽量避免 Swap
桌面电脑(内存 8G+) 10~20 流畅优先,减少卡顿
桌面电脑(内存 ≤ 4G) 60(默认) 内存紧张,需要用 Swap 兜底
代理/VPN 服务器 10 延迟敏感,减少 Swap 影响
低负载家用机 60(默认) 不需要优化,保持默认即可

三、查询当前值

# 方法一(直接看数值)
cat /proc/sys/vm/swappiness

# 方法二(带参数名显示)
sysctl vm.swappiness

四、修改 swappiness

🔹 临时修改(立即生效,重启后失效)

sudo sysctl vm.swappiness=10

验证:

cat /proc/sys/vm/swappiness
# 输出:10

🔹 永久修改(重启后依然生效)

方法一:修改 /etc/sysctl.conf(最常用)

sudo nano /etc/sysctl.conf

在文件末尾添加或修改这一行:

vm.swappiness = 10

保存退出(Ctrl + X → Y → Enter)。

立即生效:

sudo sysctl -p

方法二:创建独立配置文件(更干净,推荐)

sudo nano /etc/sysctl.d/99-swappiness.conf

写入:

vm.swappiness = 10

保存退出,然后生效:

sudo sysctl -p /etc/sysctl.d/99-swappiness.conf

五、验证是否生效

# 查看当前值
sysctl vm.swappiness

# 检查所有配置文件中是否有 swappiness 设置
grep -r "vm.swappiness" /etc/sysctl.conf /etc/sysctl.d/ 2>/dev/null

六、常见问题排查

❓ 改了没生效?

  1. 检查是否有多个 vm.swappiness 设置冲突

     
    grep -r "vm.swappiness" /etc/sysctl.conf /etc/sysctl.d/

    如果有多个,系统以最后加载的那个为准。

  2. 确认是否执行了 sysctl -p
    修改配置文件后必须执行此命令才能生效。

  3. 重启后是否还在?
    永久修改必须写在 .conf 文件里,临时修改重启会丢失。


七、一键脚本(方便快速设置)

把这个保存为 set_swappiness.sh

#!/bin/bash
# swappiness 一键设置脚本

# 检查是否以 root 运行
if [ "$EUID" -ne 0 ]; then
    echo "请以 root 权限运行: sudo ./set_swappiness.sh"
    exit 1
fi

# 设置目标值
TARGET=10

# 写入配置文件
echo "vm.swappiness = $TARGET" > /etc/sysctl.d/99-swappiness.conf

# 立即生效
sysctl -p /etc/sysctl.d/99-swappiness.conf

# 验证
echo "当前 swappiness 值: $(cat /proc/sys/vm/swappiness)"

运行:

chmod +x set_swappiness.sh
sudo ./set_swappiness.sh

八、监控 Swap 使用情况

修改后可以用以下命令观察变化:

# 查看内存和 Swap 使用情况
free -h

# 实时监控(每秒刷新)
watch -n 1 free -h

# 查看具体哪些进程在用 Swap
sudo smem -s swap
# 或
for file in /proc/*/status ; do awk '/VmSwap|Name/{printf $2 " " $3}END{ print ""}' $file 2>/dev/null; done | grep kB | sort -k2 -n

📌 总结

操作 命令
查看当前值 sysctl vm.swappiness
临时修改为 10 sudo sysctl vm.swappiness=10
永久修改为 10 写入 /etc/sysctl.d/99-swappiness.conf
生效配置 sudo sysctl -p
检查冲突 grep -r "vm.swappiness" /etc/sysctl.conf /etc/sysctl.d/

在下方留下您的评论.加入TG群.打赏🍗