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,而不是使用交换文件,可以按照以下步骤进行:
- 创建swap分区(可以使用
fdisk
或parted
工具):
- 使用
fdisk
创建一个新的Linux swap分区,通常选择类型为82
(Linux swap)。
- 格式化该分区为swap格式:
sudo mkswap /dev/sdXn # 替换 /dev/sdXn 为你刚刚创建的分区
- 启用swap分区:
sudo swapon /dev/sdXn
- 确保分区在启动时自动启用:
修改
/etc/fstab
文件,添加如下内容:
/dev/sdXn none swap sw 0 0
Swap相关内核参数
vm.swappiness
是Linux内核中用来控制交换的行为的参数。它的值决定了内存满时交换的优先级。值的范围是0
到100
,0
表示内存几乎用完之前不会交换,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