实例存储交换卷 - Amazon Elastic Compute Cloud
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

实例存储交换卷

当系统所需内存超过实际分配内存时,可以在 Linux 中使用交换空间。启用交换空间后,Linux 系统可以将很少使用的内存页面从物理内存交换至交换空间(现有文件系统中的专用分区或交换文件),并为需要高速访问的内存页面释放空间。

注意

使用交换空间进行内存分页并不像使用 RAM 那样快速高效。如果您的工作负载定期将内存分页为交换空间,您应考虑迁移到具有更多 RAM 的较大实例类型。有关更多信息,请参阅更改实例类型

c1.mediumm1.small 实例类型的可用物理内存数量有限,且启动时作为 Linux AMIs 虚拟内存的是 900 MiB 交换卷。尽管 Linux 内核将此交换空间看作根设备的一部分,但是它实际上是一个独立的实例存储卷,与根设备的类型无关。

Amazon Linux 可以自动启用和使用此交换空间,但是您的 AMI 可能需要一些额外的步骤来识别和使用此交换空间。要查看您的实例是否正在使用交换空间,可以使用 swapon -s 命令。

[ec2-user ~]$ swapon -s Filename Type Size Used Priority /dev/xvda3 partition 917500 0 -1

上述实例拥有一个已附加并启用的 900 MiB 交换卷。如果您没有通过该命令看到列出的交换卷,则可能需要启用该设备的交换空间。使用 lsblk 命令检查您的可用磁盘。

[ec2-user ~]$ lsblk NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT xvda1 202:1 0 8G 0 disk / xvda3 202:3 0 896M 0 disk

在这里,交换卷 xvda3 对该实例可用,但是尚未启用(请注意 MOUNTPOINT 字段为空)。您可以使用 swapon 命令启用交换卷。

注意

您必须在 /dev/ 列出的设备名称前加上 lsblk。设备的命名可以不同,例如 sda3sde3xvde3。在以下命令中使用系统的设备名称。

[ec2-user ~]$ sudo swapon /dev/xvda3

现在交换空间应该显示在 lsblkswapon -s 输出中。

[ec2-user ~]$ lsblk NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT xvda1 202:1 0 8G 0 disk / xvda3 202:3 0 896M 0 disk [SWAP] [ec2-user ~]$ swapon -s Filename Type Size Used Priority /dev/xvda3 partition 917500 0 -1

您还需要编辑您的 /etc/fstab 文件,以便在每次系统启动时自动启用此交换空间。

[ec2-user ~]$ sudo vim /etc/fstab

将以下行附加到您的 /etc/fstab 文件中(使用系统的交换设备名称):

/dev/xvda3 none swap sw 0 0
使用实例存储卷作为交换空间

所有实例存储卷都可用作交换空间。例如,m3.medium 实例类型包含一个适用于交换空间的 4 GB SSD 实例存储卷。如果您的实例存储卷大很多(例如 350GB),则可以考虑将卷分区为一个较小的 4-8GB 交换分区,其余部分用作数据卷。

注意

此过程仅适用于支持实例存储的实例类型。有关受支持实例类型的列表,请参阅实例存储卷

  1. 列出附加到您的实例的块储存设备以获取实例存储卷的设备名称。

    [ec2-user ~]$ lsblk -p NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT /dev/xvdb 202:16 0 4G 0 disk /media/ephemeral0 /dev/xvda1 202:1 0 8G 0 disk /

    在此示例中,实例存储卷为 /dev/xvdb。因为这是 Amazon Linux 实例,所以实例存储卷在 /media/ephemeral0 处格式化并挂载;并不是所有 Linux 操作系统都自动执行这一操作。

  2. (可选)如果您挂载了实例存储卷(它将在 MOUNTPOINT 命令输出中列出 lsblk),您需要使用以下命令卸载它。

    [ec2-user ~]$ sudo umount /dev/xvdb
  3. 使用 mkswap 命令在设备上设置一个 Linux 交换区域。

    [ec2-user ~]$ sudo mkswap /dev/xvdb mkswap: /dev/xvdb: warning: wiping old ext3 signature. Setting up swapspace version 1, size = 4188668 KiB no label, UUID=b4f63d28-67ed-46f0-b5e5-6928319e620b
  4. 启用新的交换空间。

    [ec2-user ~]$ sudo swapon /dev/xvdb
  5. 验证所使用的新交换空间。

    [ec2-user ~]$ swapon -s Filename Type Size Used Priority /dev/xvdb partition 4188668 0 -1
  6. 编辑您的 /etc/fstab 文件,以在每次系统启动时自动启用此交换空间。

    [ec2-user ~]$ sudo vim /etc/fstab

    如果您的 /etc/fstab 文件拥有 /dev/xvdb(或 /dev/sdb)条目,请将其更改为与下面的行匹配;如果没有针对此设备的条目,请将以下行附加到您的 /etc/fstab 文件(使用您系统的交换设备名称):

    /dev/xvdb none swap sw 0 0
    重要

    当实例停止或休眠后,实例存储卷数据将丢失;这包括在步骤 3中创建的实例存储交换空间格式设置。如果您停止并重新启动已配置为使用实例存储交换空间的实例,则必须在新的实例存储卷上重复 步骤 1步骤 5