2023-07-19
Amazon EC2 通过两个状态检查来监控每个 EC2 实例的健康状况:
系统状态检查
系统状态检查会检测运行您的实例的底层主机的问题。如果底层主机由于网络、硬件或软件问题而无响应或无法访问,则此状态检查失败。
实例状态检查
实例状态检查失败表示实例的可达性存在问题。出现此问题的原因是操作系统级别的错误,例如:
无法启动操作系统
未能正确安装卷
耗尽 CPU 和内存
内核恐慌
网络上不去
警告:其中一些解决方案需要实例停止和启动。在停止和启动您的实例之前,请注意以下条件:
当您停止实例时,实例存储数据会丢失。如果您的实例由实例存储支持或具有包含数据的实例存储卷,则当您停止实例时数据将丢失。有关更多信息,请参阅确定实例的根设备类型。
如果您的实例是 Amazon EC2 Auto Scaling 组的一部分,则停止该实例可能会终止该实例。如果您使用 Amazon EMR、AWS CloudFormation 或 AWS Elastic Beanstalk 启动了实例,那么您的实例可能是 AWS Auto Scaling 组的一部分。此场景中的实例终止取决于您的 Auto Scaling 组的实例缩减保护设置。如果您的实例是 Auto Scaling 组的一部分,则在开始解决步骤之前暂时从 Auto Scaling 组中删除该实例。
停止和启动实例会将公共 IP 地址释放回 AWS 动态 IP 池。将外部流量路由到您的实例时,最佳做法是使用弹性 IP 地址而不是公共 IP 地址。如果您使用的是 Amazon Route 53,您可能需要在公共 IP 更改时更新 Route 53 DNS 记录。
有关详细信息,请参阅停止和启动您的实例。
解决
1. 通过查看实例状态检查指标判断是实例状态检查失败还是系统状态检查失败。
2. 如果系统状态检查失败,请参阅我的 EC2 Linux 实例的系统状态检查失败。我该如何解决这个问题?
如果实例状态检查失败,则检查实例的系统日志以确定失败的原因。根据在系统日志中找到的数据,使用以下解决方案之一:
无法启动操作系统
如果系统日志包含启动错误,请参阅我的 EC2 Linux 实例因操作系统问题而未能通过实例状态检查。我该如何解决这个问题?
未能正确安装卷
由于无法正确挂载的挂载点,实例状态检查可能会失败,如本例所示:
[FAILED] Failed to mount /
See 'systemctl status mnt-nvme0n1p1.mount' for details.
[DEPEND] Dependency failed for Local File Systems.
耗尽 CPU 和内存
高 CPU 使用率
如果CPUUtilization 指标处于或接近 100%,则实例可能没有足够的计算容量来运行内核。
对于 T2 或 T3 实例,检查Amazon CloudWatch 指标表中的 CPU 积分指标以确定 CPU 积分是否为零或接近零。如果 CPU 积分为零,则 CPUUtilization 指标显示实例的基准性能处于饱和状态。基准性能可能为 20%、40% 等,具体取决于实例类型。
CloudWatch 指标指示 CPU 利用率达到或接近 100%,或者 T2 或 T3 实例处于饱和状态,表明状态检查因实例资源的过度使用而失败。有关如何解决此问题的说明,请参阅我的 EC2 Linux 实例由于资源过度使用而未能通过实例状态检查。我该如何解决这个问题?
块设备错误、软件错误或内核恐慌可能会导致异常的 CPU 使用高峰。如果 CPUUtilization 指标为 100%,并且系统日志包含与块设备、内存问题或其他异常系统错误相关的错误,则重新启动或停止并启动实例。
内存不足
高内存压力可能导致实例状态检查失败。在此示例中,操作系统内存不足并停止消耗最多内存的进程。