发布于 

Linux开启交换分区

买的云服务器内存比较低,只有 2G,所以打算开一个 4G 的交换分区。

创建大小为 4G 的分区。

1
dd if=/dev/zero of=/data/swap bs=1G count=4

将该分区转换为交换分区。

1
mkswap /data/swap

开启该交换分区。

1
swapon /data/swap

设置交换分区开机自启。

1
echo "/data/swap         swap                 swap    defaults 0 0" >> /etc/fstab

输入 free -h 命令查看。

1
2
3
              total        used        free      shared  buff/cache   available
Mem: 1.7Gi 934Mi 92Mi 1.0Mi 693Mi 629Mi
Swap: 4.0Gi 759Mi 3.3Gi

2024 年 1 月 16 日补充。

阿里云服务器开启交换分区后,交换内存使用量一直是 0。

后面上网查找原因,好像阿里云服务器默认要等实际内存使用完,才会使用交换内存。如果要提前使用,则需要修改 /etc/sysctl.conf。

添加一行 vm.swappiness = 60,其中 60 表示,当实际内存使用量超过 60% 时,开始使用交换内存。这个数值,可以根据需要自己调整。

然后 sysctl -p 即可。


2024 年 2 月 26 日补充。

准备把交换分区再扩大一点,所以打算删了当前交换分区再重建一个。

但是关闭当前交换分区的时候报错。

1
swapoff /data/swap 

提示 swapoff: /data/swap: swapoff failed: Cannot allocate memory

根据提示,猜测是关闭当前交换分区时,会把交换内存的数据移到真实内存,真实内存不够所以导致报错。

把跑的服务都一个个关了,然后再次执行就可以了。