

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# 排查 Amazon EC2 Auto Scaling 中运行状况不佳的实例问题
<a name="ts-as-healthchecks"></a>

以下是 Amazon EC2 Auto Scaling 返回的错误消息、潜在原因以及可以用于解决问题的步骤。

要检索错误消息，请参阅[查看运行状况检查失败原因](replace-unhealthy-instance.md)。

**Topics**
+ [实例因 EC2 实例状态检查失败而停止使用](#ts-failed-status-checks)
+ [实例因 EC2 运行状况检查而停止服务指示它已终止或停止](#ts-terminated-or-stopped)
+ [实例因 ELB 系统运行状况检查失败而停止服务](#ts-failed-elb-health-checks)
+ [其他资源](#troubleshoot-health-checks-additional-resources)

## 实例因 EC2 实例状态检查失败而停止使用
<a name="ts-failed-status-checks"></a>

**问题**：Auto Scaling 实例未通过 Amazon EC2 状态检查。

**原因 1**：如果存在导致 Amazon EC2 考虑您的自动扩缩组中的实例受损的问题，Amazon EC2 Auto Scaling 会自动替换这些实例，作为其运行状况检查的一部分。

**解决方案 1**：当实例状态检查失败时，通常必须通过更改实例配置来自行解决问题，直到应用程序不再出现任何问题。要解决该问题，请完成以下步骤：

1. 手动创建不是 Auto Scaling 组一部分的 Amazon EC2 实例并调查问题。有关调查受损实例的一般帮助，请参阅《Amazon EC2 用户指南》**中的[通过故障状态检查来排查实例问题](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/TroubleshootingInstances.html)。

1. 在确认实例已成功启动且运行状况良好后，请将新的、无错误的实例配置部署到 Auto Scaling 组。

1. 删除您创建的实例以免对 AWS 账户继续产生费用。

## 实例因 EC2 运行状况检查而停止服务指示它已终止或停止
<a name="ts-terminated-or-stopped"></a>

**问题**：已停止、重新启动或终止的 Auto Scaling 实例将被替换。

**原因 1**：用户已手动停止、重新启动或终止实例。

**解决方案 1**：如果您需要停止或重启自动扩缩组中的实例，则建议您首先将实例置于备用状态。有关更多信息，请参阅 [临时从 Auto Scaling 组中移除实例](as-enter-exit-standby.md)。

**原因 2**：Amazon EC2 Auto Scaling 尝试在 Amazon EC2 竞价服务中断实例后替换竞价型实例，因为 Spot 价格上涨超过您的最高价或容量不再可用。

**解决方案 2**：无法保证在任何给定时间点存在竞价型实例来满足请求。但是，您可以尝试以下操作：
+ 使用更高的 Spot 最高价（可能是按需价格）。通过设置更高的最高价，Amazon EC2 竞价服务可以更好地启动和保持您所需的容量。
+ 通过在多个可用区中运行多个实例类型，增加您可以从中启动实例的不同容量池的数量。有关更多信息，请参阅 [Auto Scaling 组具有多个实例类型和购买选项](ec2-auto-scaling-mixed-instances-groups.md)。
+ 如果您使用多个实例类型，请考虑启用容量再平衡功能。如果您希望 Amazon EC2 竞价服务在运行实例终止之前尝试启动新的竞价型实例，这将非常有用。有关更多信息，请参阅 [Auto Scaling 进行容量再平衡以替换存在风险的竞价型实例](ec2-auto-scaling-capacity-rebalancing.md)。

**原因 3**：使用容量块，Amazon EC2 终止在容量块结束时间前 30 分钟仍在运行的所有实例。这种突然终止会导致您的自动扩缩组尝试启动新实例以维持其所需容量，即使容量块即将结束。

**解决方案 3**：要解决此问题，请尝试以下操作：
+ 减少自动扩缩组的所需容量，以防止其尝试启动新实例。有关更多信息，请参阅 [Amazon EC2 Auto Scaling 的手动扩缩](ec2-auto-scaling-scaling-manually.md)。
+ 请务必在容量块结束时间前 30 分钟横向缩减您的自动扩缩组，这样就不会频繁遇到此错误。确保所有生命周期挂钩在容量块结束时间前 30 分钟完成。有关更多信息，请参阅 [将Capacity Blocks用于机器学习工作负载](launch-template-capacity-blocks.md)。

## 实例因 ELB 系统运行状况检查失败而停止服务
<a name="ts-failed-elb-health-checks"></a>

**问题**：Auto Scaling 实例可能会通过 EC2 状态检查。但是，它们可能无法对已注册 Auto Scaling 组的目标组或经典负载均衡器进行 Elastic Load Balancing 运行状况检查。

**原因 1**：如果您的自动扩缩组依赖于 Elastic Load Balancing 提供的运行状况检查，则 Amazon EC2 Auto Scaling 通过查看 EC2 状态检查和 Elastic Load Balancing 运行状况检查的结果来确定实例的运行状况。负载均衡器通过向每个实例发送请求并等待正确响应或与实例建立连接来执行运行状况检查。实例未能通过 Elastic Load Balancing 运行状况检查，可能是因为实例中运行的应用程序发生问题，导致负载均衡器将实例视为停止服务。

**解决方案 1**：要通过 Elastic Load Balancing 运行状况检查，请执行以下操作：
+ 验证目标组的运行状况检查设置是否已正确配置。您定义每个目标组的负载均衡器的运行状况检查设置。有关更多信息，请参阅 [配置目标的运行状况检查](getting-started-elastic-load-balancing.md#elb-health-checks-for-targets)。
+ 记住负载均衡器所需的成功代码，并且验证应用程序已正确配置为在成功时返回这些代码。
+ 验证负载均衡器和 Auto Scaling 组的安全组是否已正确配置。
+ 验证负载均衡器是否配置在与 Auto Scaling 组相同的可用区中。

**解决方案 2**：更新自动扩缩组以关闭 Elastic Load Balancing 运行状况检查。有关如何关闭这些运行状况检查的说明，请参阅[分离目标组或经典负载均衡器](https://docs.aws.amazon.com//autoscaling/ec2/userguide/attach-load-balancer-asg.html#as-remove-load-balancer)。

**原因 2**：运行状况检查宽限期与实例启动时间不匹配。

**解决方案 3**：编辑自动扩缩组的运行状况检查宽限期。将宽限期设置为足够长的时间段，以支持 Elastic Load Balancing 认为新启动的实例正常之前运行状况检查所需的连续成功次数。有关更多信息，请参阅 [设置自动扩缩组的运行状况检查宽限期](health-check-grace-period.md)。

## 其他资源
<a name="troubleshoot-health-checks-additional-resources"></a>

如果您遇到其他问题，请参阅以下 AWS re:Post 文章以获取更多疑难解答帮助：
+  [Amazon EC2 Auto Scaling 为何终止实例？](https://repost.aws/knowledge-center/auto-scaling-instance-how-terminated) 
+  [Amazon EC2 Auto Scaling 为何终止运行状况不佳的实例？](https://repost.aws/knowledge-center/auto-scaling-terminate-instance) 