为什么我的 EC2 Linux 实例无法访问,并且一项或多项状态检查失败?

上次更新时间:2020 年 6 月 2 日

我的 Amazon Elastic Compute Cloud (Amazon EC2) Linux 实例无法访问,且有一项或多项状态检查失败。如何排查状态检查失败的问题?

简短描述

Amazon EC2 使用两种状态检查监控每个 EC2 实例的运行状况:

系统状态检查:系统状态检查用于检测运行您的实例的底层主机是否存在问题。如果底层主机因网络、硬件或软件问题而没有响应或无法访问,则此状态检查失败。

实例状态检查:实例状态检查失败表示实例因诸如下面的操作系统级错误出现问题:

  • 未能启动操作系统
  • 未能正确安装卷
  • 文件系统问题
  • 不兼容的驱动程序
  • 内核崩溃

实例状态检查也可能会因过度利用实例资源而造成的严重内存压力而失败。

解决方法

查看实例的状态检查指标以确定实例的系统状态检查或实例状态检查是否失败。

如果系统状态检查失败,请参阅我的实例的系统状态检查失败。如何解决此问题?

如果实例状态检查失败,则可能是由于操作系统级别问题导致启动错误或实例的资源被过度利用。检查实例的系统日志中有无错误。下面是您可能会在系统日志中看到的常见错误:

启动错误

如果系统日志中包含启动错误,请参阅因操作系统问题,我的 EC2 Linux 实例的实例状态检查失败。如何解决此问题?

内存耗尽或磁盘已满错误

如果系统日志中包含内存耗尽或磁盘已满错误,实例可能已经因为根设备已满而进入紧急模式。有关如何排查此问题的说明,请参阅由于资源的过度利用,我的 EC2 Linux 实例的实例状态检查失败。如何解决此问题?

CPU 使用突增

如果系统日志中不包含磁盘已满错误,请查看您的实例的 CPUUtilization 指标。如果 CPUUtilization 指标等于或接近 100%,实例可能不具有足够的计算容量供内核运行。

对于 T2 或 T3 实例,请检查 CloudWatch 指标表中的 CPU 积分指标以确定 CPU 积分是否等于或接近零。如果 CPU 积分为零,CPUUtilization 指标在实例的基线性能处显示饱和稳定状态。基准性能可能是 20%、40% 等等,具体取决于实例类型。

指示 CPU 利用率等于或接近 100%,或者对于 T2 或 T3 实例指示其处于饱和平稳状态的 CloudWatch 指标表示状态检查因实例资源的过度利用而失败。有关如何排查此问题的说明,请参阅由于资源的过度利用,我的 EC2 Linux 实例的实例状态检查失败。如何解决此问题?

数据块设备错误、软件错误或其他内存错误

警告:停止并启动实例前,确保了解以下内容:

  • 当您停止和启动实例时,实例存储数据丢失。如果您的实例受实例存储支持或具有包含数据的实例存储卷,则在实例停止时数据将丢失。有关更多信息,请参阅确定实例的根设备类型
  • 如果您的实例是 Amazon EC2 Auto Scaling 组的一部分,停止实例可能会终止实例。如果您使用 Amazon EMR、AWS CloudFormation 或 AWS Elastic Beanstalk 启动实例,您的实例可能是 AWS Auto Scaling 组的一部分。在这种情况下,是否会发生实例终止取决于您的 Auto Scaling 组的实例缩减保护设置。如果您的实例是 Auto Scaling 组的一部分,则在开始执行解决步骤之前,暂时从 Auto Scaling 组中删除该实例
  • 停止和启动实例会更改实例的公共 IP 地址。在将外部流量路由到您的实例时,最佳做法是使用弹性 IP 地址而不是公有 IP 地址。如果您使用 Route 53,您可能必须在公有 IP 更改时更新 Route 53 DNS 记录
  • 如果实例的关闭行为设置为终止,则实例停止时将会终止。您可以更改实例关闭行为以避免此情况。

数据块设备错误、软件错误或不寻常的系统问题可能会导致不寻常的 CPU 使用突增。如果 CPUUtilization 指标为 100%,且系统日志中包含与数据块设备相关的错误、内存问题或其他不寻常的系统错误,请重启或停止并启动实例。