我的 EC2 实例很慢、无响应或不可访问,但我的 CPU 和内存消耗并不高,这是为什么?
上次更新日期:2022 年 8 月 25 日
我在连接到使用 Amazon Elastic Block Store (Amazon EBS) 通用型 SSD (gp2) 根卷的 Amazon Elastic Compute Cloud (Amazon EC2) 实例时遇到问题。尽管 CPU 和内存并未被完全使用,但连接速度很慢或发生超时。
简短描述
当 CPU 和内存未被充分使用时,导致 EC2 实例缓慢或无响应的可能原因有很多种,具体包括:
- 您的实例所依赖的外部服务出现问题。
- 磁盘受到重击。
- 网络连接出现问题。
本解决方案讨论一个常见的原因:gp2 根卷上的 I/O 突增积分耗尽。在大多数区域,gp2 是根卷的默认存储驱动器。有关更多信息,请参阅 Amazon EBS 卷类型。
解决方案
检查 I/O 突增积分余额
- 打开 Amazon EC2 控制台。
- 在导航窗格中选择 Instances(实例),然后选择该实例。
- 在 Storage(存储)选项卡上,选择根设备的卷 ID。
- 选择该 EBS 卷的 Monitoring(监控)选项卡,然后找到Burst Balance(突增余额)指标。如果突增余额为 0%,说明所有的突增积分已经用完,该卷无法突增到超出基准性能水平的水平。
使用以下任意一种方法来解决此问题。
估算 IOPS 需求,然后修改卷来支持该负载
- 在 Amazon CloudWatch 中找到根 EBS 卷的 VolumeReadOps 和 VolumeWriteOps 指标。有关更多信息,请参阅搜索可用指标。
- 使用 CloudWatch Sum 统计数据来获取 VolumeReadOps 和 VolumeWriteOps 的峰值水平。然后将这两个数字相加。例如:
VolumeReadOps = 737000
VolumeWriteOps = 199000
合计 = 936,000 - 要估算您需要的 IOPS 数量,用测量期间内的秒数除以上一步中的合计值。
示例:
测量期间 = 5 分钟(300 秒)
936000/300 = 3120 IOPS
gp2 卷的基准性能以每 GiB 卷大小 3 IOPS 的速度线性扩展。这意味着,一个 3120 IOPS 的卷必须扩展至 1040GiB 才能提高性能 (3120/3 = 1040)。
或者,您也可以更改卷,将 gp2 改为预置 IOPS SSD (io1)。使用 io1 卷时,您无需增加卷大小即可指定需要的 IOPS 数量。有关何时使用 io1 卷的更多信息,请参阅预置 IOPS SSD 卷。有关 gp2 和 io1 卷的成本比较,请参阅 Amazon EBS 定价。
更改工作负载的分配方式
如果一个 EC2 实例上有多个应用程序,这些应用程序会竞争根 EBS 卷的 IOPS。随着工作负载的逐渐增长,IOPS 需求也会增加。要提高实例性能,请考虑为您的应用程序使用额外的非根 EBS 卷。此外,请考虑将根卷仅用于操作系统。
如果在调整卷大小和工作负载分配后仍遇到 EC2 实例连接问题,请参阅排查实例的连接问题。