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

上次更新时间:2019 年 8 月 23 日

我在连接到使用 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) 卷。有关 gp2io1 卷成本比较的更多信息,请参阅 Amazon EBS 定价

更改工作负载的分配方式

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

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