给VPS分配Swap交换空间,避免内存耗尽卡死

HyriKuma

解决服务器经常性因为内存不足导致卡死的问题。

最近使用Azure的主机经常性会出现卡死的问题,导致搭建的一些服务都无法使用,甚至有时候连ssh都连接不上。最开始只能让主机重启来解决,但一段时间之后又会卡死,根本性的内存问题仍然没有解决。进入到服务器使用htop命令,发现内存几乎被占满,再使用free -h命令,发现Swap空间为0…

什么是Swap交换空间

Swap交换空间是硬盘被预留用作虚拟内存扩展的一部分空间,当原始物理内存不足时,系统会将一部分不常用的资源从物理内存移到Swap中,从而将物理内存资源释放出来给更需要的进程来使用。而当进程需要调用在Swap的资源时,系统又会将资源移到物理内存中以供使用。

Swap的存在能够扩展系统的可用内存容量,让系统能够处理更多的进程负载,大大提高了内存使用的灵活性,避免了内存不足导致系统卡死或者一些进程直接被杀死的情况。当然缺点也很明显,由于Swap本质上是硬盘上的一部分空间,其读写速度肯定是远不如物理内存的,让Swap和物理内存进行额外的数据交换势必会降低系统的响应速度,当Swap空间被大量使用时,系统就会变得十分缓慢,所以说Swap其实就是内存不够用时的一种妥协。

对于Azure这类的虚拟主机来讲,默认都是没有预先配置Swap空间的,需要用户自行添加。

给系统添加Swap交换空间

首先连接进入服务器,为系统创建一个Swap文件,可以使用dd命令来进行创建,在sudo权限下执行

1
fallocate -l 4G /swapfile

这代表在根目录下创建一个4GB大小的Swap文件,当然路径可以自行修改。

然后为文件设置访问权限,只允许root用户进行读写

1
chmod 600 /swapfile

然后使用mkswap将Swap文件转为Swap空间

1
mkswap /swapfile 

最后使用swapon激活Swap空间

1
swapon /swapfile

此时再次执行free -h,能够看到swap空间的total变为4Gi,说明已经成功添加。

最后让Swap空间永久生效,首先打开/etc/fstab文件

1
nano /etc/fstab

在最后一行添加上

1
/swapfile none swap sw 0 0

修改Swap空间大小

首先停用当前的Swap空间,在sudo下执行

1
swapoff /swapfile

然后可以使用fallocate命令来调整Swap文件大小

1
fallocate -l 2G /swapfile

这代表将Swap文件调整到2GB大小。

重新将Swap文件转为Swap空间并激活

1
mkswap /swapfile && swapon /swapfile

删除Swap空间

同样首先停用Swap空间

1
swapoff /swapfile

然后打开/etc/fstab文件,删除最后一行的Swap配置

最后直接使用rm命令删除整个Swap文件

1
rm /swapfile
On this page
给VPS分配Swap交换空间,避免内存耗尽卡死