我的 EC2 实例速度很慢、无响应或无法访问,但我的 CPU 和内存消耗并不高

上次更新时间:2020 年 9 月 22 日

我在连接到使用 Amazon Elastic Block Store (Amazon EBS) 通用型 SSD (gp2) 根卷的 Amazon Elastic Compute Cloud (Amazon EC2) 实例时遇到问题。尽管 CPU 和内存并未被完全利用,但连接速度很慢或超时。

简短描述

可能导致此问题的原因有很多,例如实例依赖的外部服务出现问题、磁盘抖动或网络连接问题。本文讨论了一个常见的原因:gp2 根卷上的 I/O 突增积分耗尽 。(在大多数区域,gp2 是根卷的默认存储驱动器。有关更多信息,请参阅 Amazon EBS 卷类型。)

解决方法

检查 I/O 突增积分余额

  1. 打开 Amazon EC2 控制台
  2. 在导航窗格中选择实例,然后选择该实例。
  3. 描述选项卡中选择根设备链接,然后选择 EBS ID 链接。
  4. 选择该 EBS 卷的监控选项卡,然后找到突增余额指标。如果突增余额为 0%,说明所有的突增积分已经用完,该卷无法突增到超出基准性能水平的水平。使用以下任意一种方法来解决此问题。

估算 IOPS 需求,然后修改卷来支持该负载

  1. 在 Amazon CloudWatch 中找到根 EBS 卷的 VolumeReadOpsVolumeWriteOps 指标。有关更多信息,请参阅搜索可用指标
  2. 使用 CloudWatch Sum 统计数据来获取 VolumeReadOpsVolumeWriteOps 的峰值水平。然后将这两个数字相加。例如:
    VolumeReadOps
    = 737,000
    VolumeWriteOps
    = 199,000
    合计 = 936,000
  3. 要估算您需要的 IOPS 数量,用测量间隔秒数除以上一步中的合计值。例如:
    测量间隔 = 5 分钟(300 秒)
    936,000 / 300 = 3,120 IOPS

gp2 卷的基准性能以每 GiB 卷大小 3 IOPS 的速度线性扩展。这意味着,一个 3,120 IOPS 的卷必须扩展至 1,040 GiB 才能提高性能 (3,120 / 3 = 1,040)。

或者,您也可以更改卷,将 gp2 改为预置 IOPS SSD (io1)。使用 io1 卷时,您无需增加卷大小即可指定需要的 IOPS 数量。有关何时使用 io1 卷的更多信息,请参阅预置 IOPS SSD((io1 和 io2)卷。有关 gp2io1 卷的成本比较,请参阅 Amazon EBS 定价

更改工作负载的分配方式

如果一个 EC2 实例上有多个应用程序,这些应用程序会竞争根 EBS 卷的 IOPS。随着工作负载的逐渐增长,IOPS 需求也会增加。要提高实例性能,请考虑为您的应用程序使用额外的非根 EBS 卷。此外,请考虑将根卷仅用于操作系统。

如果在调整卷大小和工作负载分配后仍遇到 EC2 实例连接问题,请参阅排查实例的连接问题