Amazon Elastic Compute Cloud
用户指南(适用于 Linux 实例)
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 AWS 服务入门

使您的实例休眠

当您使实例休眠时,我们向操作系统发出信号来执行休眠 (suspend-to-disk),这会将实例内存 (RAM) 中的内容保存到您的 Amazon EBS 根卷。我们保留实例的 Amazon EBS 根卷以及任何附加的 Amazon EBS 数据卷。当您重新启动实例时,Amazon EBS 根卷将还原到其之前的状态,并重新加载 RAM 内容,之前在实例上运行的进程将恢复运行。之前附加的数据卷会重新附加,实例也会保留其实例 ID。

只有当实例已启用休眠并且满足休眠先决条件,您才可以使该实例休眠。目前只有 Amazon Linux 支持休眠。

如果实例或应用程序在引导和进行内存占用以开始发挥全部生产功能时所需的时间较长,您可以使用休眠来“预热”实例。若要“预热”实例,请启动该实例,使其进入所需状态,然后使实例休眠,此时该实例可根据需要随时恢复到休眠前的状态。

当实例处于 stopped 状态时,我们不会收取已休眠实例的使用费用。当实例处于 stopping 状态时,此时 RAM 的内容转移到 Amazon EBS 根卷,我们会收取实例使用费用(不同于您停止一个实例而不休眠它)。我们不收取数据传输费,但我们会对所有 Amazon EBS 卷的存储(包括 RAM 内容的存储)收费。

如果您不再需要某个实例,可以随时终止它,包括当实例处于 stopped(已休眠)状态时。有关更多信息,请参阅终止您的实例

重要

Windows 实例当前不支持休眠。

休眠概述

下图显示了休眠过程的基本概述。


    			休眠流概述

当您使正在运行的实例休眠时,将出现以下情况:

  • 启动休眠时,实例将进入 stopping 状态。我们向操作系统发出信号来执行休眠 (suspend-to-disk),这会冻结所有进程、将 RAM 中的内容保存到 Amazon EBS 根卷,然后执行常规关闭。

  • 关闭完成后,实例将进入 stopped 状态。

  • 所有 Amazon EBS 卷保持附加到实例,而且其数据将保留下来,包括已保存的 RAM 内容。

  • 在大多数情况下,实例在重新启动时会迁移到新的底层主机上,这与您停止并重新启动实例的情况相同。

  • 当您重新启动实例时,实例引导,操作系统从 Amazon EBS 根卷读取 RAM 内容,然后再对进程解除冻结以恢复其状态。

  • 实例在休眠和重启时会保留其私有 IPv4 地址以及任何 IPv6 地址。我们会释放公有 IPv4 地址并在您重启实例时为其分配新的 IPv4 地址。

  • 实例会保留其关联的弹性 IP 地址。您需要为与已休眠实例关联的所有弹性 IP 地址付费。

  • 当您使 ClassicLink 实例休眠时,它会与所链接的 VPC 取消链接。您必须在重新启动之后将实例再次链接到 VPC。有关更多信息,请参阅ClassicLink

有关休眠与重启、停止和终止之间的区别,请参阅重启、停止、休眠与终止之间的区别

休眠先决条件

要使实例休眠,必须满足以下先决条件:

  • 实例系列:支持以下实例系列:C3、C4、C5、M3、M4、M5、R3、R4 和 R5,但 *.metal 除外。

  • 支持的 AMI:以下 AMI 支持休眠:Amazon Linux AMI 2018.03 发布版本 2018.11.16 或更高版本。

    即将推出对 Amazon Linux 2 的支持。只有 HVM AMI 支持休眠。要配置您自己的 AMI 以支持休眠,请参阅 配置现有 AMI 以支持休眠

  • 根卷类型:实例根卷必须是 Amazon EBS 卷,而不是实例存储卷。

  • Amazon EBS 根卷大小:根卷必须足够大,以存储 RAM 内容并满足您的预期使用量,例如,操作系统或应用程序。如果您启用休眠,则启动时在根卷上分配空间以存储 RAM。

  • Amazon EBS 根卷加密:要使用休眠,必须加密根卷以确保在休眠时保护内存中的敏感内容。将 RAM 数据移动到 Amazon EBS 根卷时,它始终加密。根卷的加密在实例启动时实施。为确保根卷是加密 Amazon EBS 卷,您用于启动实例的 AMI 必须加密。有关更多信息,请参阅从未加密的 AMI 创建带加密的根快照的 AMI

  • 在启动时启用休眠:在启动时,使用 Amazon EC2 控制台或 AWS CLI 启用休眠。您不能在现有实例(正在运行或已停止)上启用休眠。有关更多信息,请参阅为实例启用休眠

  • 购买选项:此功能仅面向按需实例和预留实例提供。有关更多信息,请参阅休眠中断的 Spot 实例

限制

休眠不支持以下操作:

  • 更改已休眠实例的实例类型或大小

  • 从启用了休眠的实例创建快照或 AMI

  • 从已休眠的实例创建快照或 AMI

您不能停止实例存储支持的实例,也不能使这些实例休眠*。

您不能使位于 Auto Scaling 组中或者由 Amazon ECS 使用的实例休眠。如果实例位于 Auto Scaling 组中并且您尝试使该实例休眠,则 Amazon EC2 Auto Scaling 服务会将已停止的实例标记为运行状况不佳,可能会终止它并启动替换实例。有关更多信息,请参阅 Amazon EC2 Auto Scaling 用户指南 中的 Auto Scaling 实例的运行状况检查

我们支持的实例持续休眠时间不超过 60 天。要保留实例超过 60 天,您必须重新启动已休眠的实例,停止该实例,然后重新启动它。

我们不断通过升级和安全补丁更新平台,这可能会与现有已休眠的实例冲突。我们会通知您有关需要重新启动已休眠实例的关键更新,这样我们才会执行关闭或重启操作以应用必需的升级和安全补丁。

*对于启用休眠的 C3 和 R3 实例,请勿使用实例存储卷。

配置现有 AMI 以支持休眠

要让使用您自己的 AMI 启动的实例休眠,必须配置 AMI 来支持休眠。有关更多信息,请参阅 更新实例软件

如果您使用支持的 AMI 之一,或者基于支持的 AMI 之一创建了 AMI,则无需配置它来支持休眠。支持的 AMI 已预配置了支持休眠。

配置 Amazon Linux AMI 以支持休眠 (AWS CLI)

  1. 使用以下命令更新为最新内核 4.14.77-70.59 或更高版本:

    sudo yum update kernel
  2. 使用以下命令从存储库安装 ec2-hibinit-agent 程序包:

    sudo yum install ec2-hibinit-agent
  3. 重启实例。

  4. 通过运行以下命令来确认内核版本已更新为 4.14.77-70.59 或更高版本:

    uname -a
  5. 停止实例并创建 AMI。有关更多信息,请参阅从实例创建 Linux AMI

为实例启用休眠

要使实例休眠,必须先为其启用休眠。在启动时,使用控制台或命令行启用休眠。您不能为现有实例(正在运行或已停止)启用休眠。

启用休眠(控制台)

  1. 按照使用启动实例向导启动实例过程操作。

  2. 选择一个 Amazon 系统映像 (AMI) 页面上,选择一个支持休眠的 AMI。有关支持的 AMI 的更多信息,请参阅休眠先决条件

  3. 选择一个实例类型页面上,选择一种支持的实例类型,然后选择下一步:配置实例详细信息。有关支持的实例类型的信息,请参阅休眠先决条件

  4. 配置实例详细信息页面上,对于 Stop - Hibernate Behavior (停止 - 休眠操作),选中 Enable hibernation as an additional stop behavior (启用休眠作为额外的停止操作) 复选框。

  5. 根据向导的提示继续。检查完核查实例启动页面上的选项后,选择启动。有关更多信息,请参阅使用启动实例向导启动实例

启用休眠 (AWS CLI)

  • 使用 run-instances 命令启动实例。使用 --hibernation-options Configured=true 参数启用休眠。

    aws ec2 run-instances --image-id ami-abc12345 --count 1 --instance-type m5.large --key-name MyKeyPair --hibernation-options Configured=true

查看实例是否已启用休眠(控制台)

  1. 打开 Amazon EC2 控制台 https://console.amazonaws.cn/ec2/

  2. 在导航窗格中,选择 Instances

  3. 选择实例,在详细信息窗格中,检查 Stop - Hibernation behavior (停止 - 休眠操作)已启用 表明已为实例启用休眠。

    注意

    您无法在启动之后启用或禁用休眠。

查看实例是否已启用休眠 (AWS CLI)

  • 使用 describe-instances 命令并指定 --filters "Name=hibernation-options.configured,Values=true" 参数以筛选启用了休眠的实例。

    aws --region us-east-1 ec2 describe-instances --filters "Name=hibernation-options.configured,Values=true"

    输出中的以下字段指示实例已启用了休眠:

    "HibernationOptions": { "Configured": true }

使实例休眠

如果实例已启用休眠并且满足休眠先决条件,则您可以使用控制台或命令行使该实例休眠。如果无法成功使实例休眠,则会进行正常关闭。

使 Amazon EBS 支持的实例休眠(控制台)

  1. 打开 Amazon EC2 控制台 https://console.amazonaws.cn/ec2/

  2. 在导航窗格中,选择 Instances

  3. 选择实例,然后依次选择操作实例状态Stop - Hibernate (停止 - 休眠)。如果 Stop - Hibernate (停止 - 休眠) 已禁用,则实例已经休眠或停止,或者无法休眠。有关更多信息,请参阅休眠先决条件

  4. 在确认对话框中,选择 Yes, Stop - Hibernate (是,停止 - 休眠)。使实例休眠可能需要几分钟时间。当实例正在进入休眠时,实例状态更改为正在停止;在实例已休眠的情况下,实力状态将更改为已停止

使 Amazon EBS 支持的实例休眠 (AWS CLI)

  • 使用 stop-instances 命令并指定 --hibernate 参数。

    aws ec2 stop-instances --instance-ids i-1234567890abcdef0 --hibernate

查看是否已在实例上启动休眠(控制台)

  1. 打开 Amazon EC2 控制台 https://console.amazonaws.cn/ec2/

  2. 在导航窗格中,选择 Instances

  3. 选择实例,在详细信息窗格中,检查状态转换原因消息Client.UserInitiatedHibernate: User initiated hibernate (Client.UserInitiatedHibernate:用户启动了休眠) 指明实例上启动了休眠。

查看是否已在实例上启动休眠 (AWS CLI)

  • 使用 describe-instances 命令并指定 --filters "Name=state-reason-code,Values=Client.UserInitiatedHibernate" 参数以筛选其上启动了休眠的实例。

    aws --region us-east-1 ec2 describe-instances --filters "Name=state-reason-code,Values=Client.UserInitiatedHibernate"

    输出中的以下字段指明实例上启动了休眠。

    "StateReason": { "Code": Client.UserInitiatedHibernate }

重启已休眠的实例

按照启动已停止实例的相同方式,重启已休眠的实例。

重启已休眠的实例(控制台)

  1. 打开 Amazon EC2 控制台 https://console.amazonaws.cn/ec2/

  2. 在导航窗格中,选择 Instances

  3. 选择已休眠的实例,然后依次选择操作实例状态开始。实例进入 running 状态可能需要几分钟时间。在此期间,实例状态检查显示实例处于失败状态,直至实例已重新启动。

重启已休眠的实例 (AWS CLI)

休眠问题排查

使用此信息帮助您诊断和修复在使实例休眠时可能遇到的问题。

在启动后无法立即休眠

如果您在实例启动之后过快地尝试使实例休眠,则会收到错误。

在启动之后,您必须等待大约两分钟然后才能休眠。

stopping 转变为 stopped 用时太长,内存状态在启动后无法恢复

如果正在进入休眠的实例从 stopping 状态转变为 stopped 状态用时过长,并且在启动之后内存状态未恢复,则这可能表明休眠的配置不正确。

检查实例系统日志,查找与休眠相关的消息。要访问系统日志,请连接到实例或者使用 get-console-output 命令。hibinit-agent 查找日志行。如果日志行指示出现故障或者缺少日志行,则很有可能在启动时配置休眠失败。

例如,以下消息指明实例根卷不够大:hibinit-agent: Insufficient disk space. Cannot create setup for hibernation. Please allocate a larger root device.

如果 hibinit-agent 的最后日志行是 hibinit-agent: Running: swapoff /swap,则已成功配置休眠。

如果您未看到来自这些进程的任何日志,您的 AMI 可能不支持休眠。有关支持的 AMI 的信息,请参阅休眠先决条件。如果您使用自己的 AMI,请确保您按照配置现有 AMI 以支持休眠的说明操作。

实例卡在 stopping 状态

如果您已使实例休眠并且实例卡在 stopping 状态,则可以强制停止它。有关更多信息,请参阅排查实例的停止问题