VPS设置Swap
最近更新:2025-10-20   |   字数总计:947   |   阅读估时:3分钟   |   阅读量:
  1. VPS设置Swap
    1. 工作动机
      1. 背景
      2. 为什么要用Swap
    2. 设置Swap
      1. 创建Swap文件
      2. 设置正确的权限
      3. 格式化Swap文件
      4. 启用Swap文件
      5. 验证Swap文件是否可用
      6. 持久化Swap配置
    3. 效果

VPS设置Swap

工作动机

背景

前一段时间,我发现我的VPS受到很多的SSH爆破攻击,出于安全和好奇,我运行了两个容器,一个用于运行mysql服务,另一个用于运行cowrie蜜罐服务,以记录攻击者的行为。

一开始,我只挂了一个静态网站,所以我以为我的VPS内存还有很多剩余,的确是有剩余,但是总量也不是很多….

存储有60GB,但是内存只有可怜的1GiB

而运行docker容器又是一个很耗费内存的操作,所以后面经常出现VPS卡死的情况。

为什么要用Swap

学过操作系统这门课,了解一些内存交换(Swap)的概念,我想尝试一下是否可以通过这种方式去解决VPS卡死的问题

Swap

当系统物理内存(RAM)耗尽时,操作系统可以将一些不常用的数据从内存中移到Swap空间,以腾出内存用于当前需要运行的进程。这种机制允许系统在物理内存不足时继续运行,而不会立即崩溃或终止进程。

首先使用free指令查看系统内存的使用情况。

1
2
3
4
$ free -h
total used free shared buff/cache available
Mem: 883Mi 362Mi 131Mi 4.0Mi 389Mi 372Mi
Swap: 0B 0B 0B

该输出表示,系统总共有883 MiB的物理内存,其中362 MiB被使用,131 MiB是空闲的,389 MiB被用作缓冲区和缓存,可用内存为372 MiB,在需要时,可以使用这部分内存。

Swap这一行数据的值都为0,表明系统并没有配置Swap空间。

为了使得在这个物理内存有限的机器上运行这些程序,下面就开始设置Swap。

设置Swap

创建Swap文件

1
sudo fallocate -l 16G /Swapfile

设置正确的权限

1
sudo chmod 600 /Swapfile

这确保只有 root 用户可以直接访问Swap文件,这对于系统安全性是非常重要的。

1
-rw------- 1 root root 16G Jan 28 10:00 /Swapfile

安全性考虑

在多用户系统中,不同用户可能拥有不同的权限。设置Swap文件的权限为 600 可以防止潜在的安全风险,比如未经授权的用户读取或修改Swap文件的内容,可能会影响系统稳定性或暴露敏感数据。

因此,尽管Swap文件设置了 600 权限,所有用户仍然可以透明地使用Swap空间,只是他们不能直接访问或修改Swap文件的内容。这种做法可以保证系统的安全性和稳定性。

格式化Swap文件

1
sudo mkSwap /Swapfile

这将文件格式化为Swap文件,使其可以被系统用作Swap空间。

启用Swap文件

1
sudo Swapon /Swapfile

验证Swap文件是否可用

1
sudo Swapon --show

持久化Swap配置

1
echo '/Swapfile none Swap sw 0 0' | sudo tee -a /etc/fstab

/etc/fstab文件包含了所有需要在系统启动时自动挂载的文件系统信息。将Swap文件添加到此文件中,可以确保每次系统重启后,Swap文件都会自动启用。

效果

在完成之后再次使用free命令就可以查看到,刚设置的Swap区生效了。

1
2
3
4
$ free -h
total used free shared buff/cache available
Mem: 883Mi 379Mi 103Mi 4.0Mi 399Mi 354Mi
Swap: 15Gi 0B 15Gi

在配置Swap前,重启docker容器特别容易导致服务器hang住,在配置完成后,我再次restart docker容器,这时系统会卡住几秒钟,然后restart成功,此时再使用free命令查看,发现Swap空间已被启用了。

1
2
3
4
$ free -h
total used free shared buff/cache available
Mem: 883Mi 481Mi 111Mi 3.0Mi 290Mi 254Mi
Swap: 15Gi 387Mi 15Gi

之后都几乎没有出现过VPS直接卡死的情况。