Swap

swap可以避免应用程序因内存不足而崩溃,但它的性能远不及内存,适用于特殊场景(例如我的ecs只有2G内存😅)。实现方式可以基于交换文件,也可以基于磁盘分区,并且内核参数vm.swappiness可以定义swap与内存的使用占比,即优先使用内存还是swap。


创建一个交换文件作为Swap

# 创建一个交换文件作为Swap
dd if=/dev/zero of=/swapfile bs=1M count=4096

# 设置合适的权限
chmod 600 /swapfile

# 将文件格式化为swap空间
mkswap /swapfile

# 启用swap文件
swapon /swapfile

# 持久化
echo '/swapfile none swap sw 0 0' >> /etc/fstab

# 检查Swap是否已启用
free -h
swapon --show

使用磁盘分区作为Swap

如果你想将整个磁盘分区作为swap,而不是使用交换文件,可以按照以下步骤进行:

  1. 创建swap分区(可以使用fdiskparted工具):
  • 使用fdisk创建一个新的Linux swap分区,通常选择类型为82(Linux swap)。
  1. 格式化该分区为swap格式
sudo mkswap /dev/sdXn  # 替换 /dev/sdXn 为你刚刚创建的分区
  1. 启用swap分区
sudo swapon /dev/sdXn
  1. 确保分区在启动时自动启用: 修改/etc/fstab文件,添加如下内容:
/dev/sdXn none swap sw 0 0

Swap相关内核参数

vm.swappiness是Linux内核中用来控制交换的行为的参数。它的值决定了内存满时交换的优先级。值的范围是01000表示内存几乎用完之前不会交换,100表示内存稍微紧张时就会使用swap。

查看当前swappiness值:

cat /proc/sys/vm/swappiness

临时调整swappiness

sudo sysctl vm.swappiness=30  # 设置为30,降低交换的频率

永久更改swappiness: 编辑/etc/sysctl.conf文件,加入:

vm.swappiness=30

然后执行:

sudo sysctl -p