给VPS分配Swap交换空间,避免内存耗尽卡死
解决服务器经常性因为内存不足导致卡死的问题。
最近使用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 |