跳至内容

如何对 EC2 Linux 实例的状态检查失败问题进行故障排除?

3 分钟阅读
0

我的 Amazon Elastic Compute Cloud (Amazon EC2) Linux 实例无法访问,并且其状态检查失败。

简短描述

Amazon EC2 使用三种状态检查来监控 EC2 实例的运行状况。

系统状态检查

系统状态检查会检测实例底层硬件的问题。如果由于网络、硬件或软件问题,底层硬件无响应或无法访问,则系统状态检查便会失败。

实例状态检查

当您无法访问实例时,实例状态检查将失败。实例状态检查可能由于以下原因而失败:

  • 操作系统 (OS) 无法启动
  • Amazon Elastic Block Store (Amazon EBS) 卷无法正确挂载
  • CPU 和内存已耗尽
  • 内核崩溃
  • 网络故障
  • 根 EBS 卷参数节流

附加的 EBS 状态检查

附加的 EBS 状态检查用于监控附加到实例的 EBS 卷是否可以访问,以及是否可以完成 I/O 操作。有关详细信息,请参阅附加的 EBS 状态检查

解决方法

要查看是实例状态检查失败还是系统状态检查失败,请查看实例的状态检查指标

如果系统状态检查失败,请参阅为什么我的 EC2 Linux 实例未能通过系统状态检查?

如果实例状态检查失败,请检查实例的系统日志以查看失败的原因。然后,选择以下解决方法选项之一来解决问题。

**重要事项:**以下某些解决方法要求您先停止实例,然后再启动实例。停止实例时,实例存储卷中的数据会丢失。如果您的实例没有 EBS 支持的卷,请在停止实例之前备份数据。此外,在停止并启动实例后,实例的公共 IPv4 地址可能会更改。要保留相同的公共 IPv4 地址,请使用弹性 IP 地址。有关详细信息,请参阅停止和启动 Amazon EC2 实例

操作系统无法启动

如果系统日志包含启动错误,请参阅如何对因操作系统问题而未能通过实例状态检查的 EC2 Linux 实例进行故障排除?

EBS 卷无法正确挂载

挂载点故障可能会导致实例状态检查失败。

挂载点故障输出示例:

[FAILED] Failed to mount /
See 'systemctl status mnt-nvme0n1p1.mount' for details.
[DEPEND] Dependency failed for Local File Systems.

有关这些错误的详细信息,请参阅为什么在尝试启动 EC2 Linux 实例时,它会进入紧急模式?此外,请参阅如何对因操作系统问题而未能通过实例状态检查的 EC2 Linux 实例进行故障排除?

当您将实例类型从 Xen 更改为基于 Nitro 的实例时,卷挂载可能会失败。挂载失败是因为 EBS 卷在基于 Nitro 的实例上暴露为 NVMe 块设备。例如,设备名称为 /dev/nvme0n1/dev/nvme1n1。您在块设备映射中指定的设备名称将被重命名为 NVMe 设备名称。例如,/dev/nvme[0-26]n1

**注意:**块设备驱动程序分配 NVMe 设备名称的顺序可能与您在块设备映射中指定的顺序不同。为避免在基于 Nitro 的实例上挂载失败,最佳做法是使用标签或 UUID 作为设备名称。有关详细信息,请参阅 Make an Amazon EBS volume available for use(使 Amazon EBS 卷可供使用)

CPU 和内存已耗尽

CPU 利用率高

如果 CPUUtilization 指标等于或接近 100%,则表明实例没有足够的计算容量来运行内核。

对于 T2 或 T3 实例,请检查 Amazon CloudWatch CPU 积分指标,以查看 CPU 积分是否等于或接近零。如果 CPU 积分为零,则 CPUUtilization 指标将显示实例的基准性能处于饱和稳定状态。例如,基准性能可能为 20% 或 40%。如果 CPU 利用率等于或接近 100%,或者 T2 或 T3 实例已达到饱和稳定状态,则状态检查会因资源过度使用而显示为失败。

要解决此问题,请参阅如何对因资源过度使用而未通过状态检查的 EC2 Linux 实例进行故障排除?

块设备错误、软件错误或内核崩溃会导致 CPU 使用率异常激增。如果 CPU 利用率为 100%,请检查系统日志中是否存在块设备或内存问题错误,或其他异常系统错误。然后,重启或者停止并启动实例。

内存不足

内存压力过高会导致实例状态检查失败。在以下示例日志摘录中,操作系统内存不足,OOM-killer 已启动。要解决此错误,请停止内存消耗最多的进程。

[115879.769795] Out of memory: kill process 20273 (httpd) score 1285879 or a child
[115879.769795] Killed process 1917 (php-cgi) vsz:467184kB, anon-rss:101196kB, file-rss:204kB

默认情况下,EC2 实例内存和磁盘指标不会发送到 CloudWatch。有关详细信息,请参阅 Collect metrics, logs, and traces with the CloudWatch agent(使用 CloudWatch 代理收集指标、日志和跟踪信息)

要排查并解决内存不足问题,请将实例升级到更大的实例类型。或者,向实例添加交换存储空间以缓解内存压力。有关详细信息,请参阅如何分配内存以在 Amazon EC2 实例中用作交换文件?此外,请参阅如何在硬盘上使用分区在 Amazon EC2 实例上分配内存作为交换空间?

磁盘已满错误

如果系统日志中包含磁盘已满错误,则表明由于根设备已满,实例处于紧急模式。

系统日志示例:

$: sudo service apache2 restart
Error: No space left on device

$: sudo /etc/init.d/mysql restart
[....] Restarting mysql (via systemctl):
mysql.serviceError: No space left on device

$: df -h /
Filesystem      Size  Used Avail Use% Mounted on
/dev/root       7.7G  7.7G     0 100% /

有关详细信息,请参阅如何对因资源过度使用而未通过状态检查的 EC2 Linux 实例进行故障排除?此外,请参阅如果我收到错误消息,提示我文件系统没有剩余空间,我应该如何增加 EBS 卷的大小?

内核崩溃

当内核在操作过程中检测到内部致命错误时,就会发生内核崩溃。如果内核未正确加载,则会在操作系统启动期间出现此错误。内核加载失败会导致实例启动失败。

内核崩溃错误输出示例:

Linux version
2.6.16-xenU (builder@xenbat.amazonsa) (gcc version 4.0.1 20050727 (Red Hat4.0.1-5)) #1 SMP Mon May 28 03:41:49 SAST 2007
Kernel command
line:  root=/dev/sda1 ro 4
Registering block device major 8
Kernel panic - not syncing: VFS: Unable to mount root fs on unknown-block(8,1)

有关信息,请参阅如何解决 EC2 实例的“Kernel panic - not syncing”错误?此外,请参阅更新导致我的 EC2 实例无法重启时,如何恢复到已知的稳定内核?

网络故障

您的网络可能由于以下原因而出现故障:

  • 实例上未安装 cloud-init 包。
  • cloud-init 包用于在启动时更新网络配置。

要更正此错误并在您的实例上安装 cloud-init 包,请在您的终端中运行以下命令。

Amazon、Amazon Linux 2、Amazon Linux 2023 或 RedHat 操作系统:

sudo yum install cloud-init -y

Ubuntu 或 Debian 操作系统:

sudo apt install cloud-init -y

MAC 地址硬编码在配置文件中

硬编码的 MAC 地址位于 Linux 配置文件和 udev 配置文件中。您可以在以下位置找到日志文件:

  • /etc/udev/rules.d/
  • /etc/udev/rules.d/70-persistent-net.rules
  • /etc/udev/rules.d/80-net-name-slot.rules

要解决由硬编码的 MAC 地址引起的网络问题,请删除条目或配置文件,然后运行以下命令:

sudo mv /etc/udev/rules.d/70-persistent-net.rules /root/

移动配置文件后,重启网络服务,以确保获取新的 MAC 地址。

IP 地址硬编码在网络配置文件中

当您从具有静态配置 IP 地址的实例创建亚马逊机器映像 (AMI) 时,配置文件将包含硬编码的 IP 地址。要更正此错误,请将您的网络接口设置为使用 DHCP。

**注意:**您无法更新已经存在的 AMI。在创建新的 AMI 之前,您必须将网络接口设置为使用 DHCP。

缺少 ENA 或 Intel 增强型网络驱动程序

有关缺少弹性网络适配器 (ENA) 或 Intel 增强型网络驱动程序的详细信息,请参阅 Amazon EC2 实例上的增强联网功能

网络接口在启动时被自动重命名

要停用可预测的网络接口重命名,请向内核命令行中添加 net.ifnames=0。要使用占位符,您必须使用 ENA 激活增强联网功能,并重新构建或更新 grub 配置文件。

根 EBS 卷参数节流

当根 EBS 卷参数被节流时,实例可能会因无法访问且无响应而导致状态检查失败。

当 EBS 卷的每秒进行 I/O 操作的次数 (IOPS) 或吞吐量超过已配置的限制时,可能会发生节流。由于 EBS 卷节流导致性能下降,实例可能会变得无响应或无法访问。

要解决 EBS 卷节流问题,请完成以下步骤:

  1. 监控并分析 CloudWatch 指标,例如卷队列长度、卷读/写操作以及卷读/写字节数。有关详细信息,请参阅如何使用 CloudWatch 指标来计算我的 EBS 卷提供的平均吞吐量和平均 IOPS 数量?
  2. 停止并启动实例,或重启实例,以暂时解决该问题。
  3. 为 EBS 卷配置更多的 IOPS 或吞吐量。或者,升级到更适合您的工作负载的 EBS 卷类型和大小。有关详细信息,请参阅请求修改 Amazon EBS 卷

相关信息

对状态检查失败的 Amazon EC2 Linux 实例进行故障排除

为什么我的 EC2 Windows 实例因系统状态检查失败或状态检查 0/2 而关闭?

为什么我的 EC2 Windows 实例因实例状态检查失败而关闭?

状态检查类型

AWS 官方已更新 6 个月前